├── .gitignore ├── .idea ├── .gitignore ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── gradle.xml ├── jarRepositories.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── .idea │ ├── .gitignore │ ├── gradle.xml │ ├── misc.xml │ └── modules.xml ├── build.gradle ├── libs │ ├── alipaySdk-15.7.5.aar │ ├── m3u8download.jar │ └── open_sdk_3.5.2.152_r9e04b1c_lite.jar ├── local.properties ├── proguard-rules.pro ├── release │ ├── app-release.apk │ └── output-metadata.json └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── srcbox │ │ └── file │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── font │ │ │ └── iconfont.ttf │ │ ├── html │ │ │ ├── privacyXy.html │ │ │ └── userXy.html │ │ ├── img │ │ │ ├── home │ │ │ │ ├── code.png │ │ │ │ ├── else.png │ │ │ │ ├── happ.png │ │ │ │ ├── happy.png │ │ │ │ ├── play.png │ │ │ │ ├── util.png │ │ │ │ ├── util │ │ │ │ │ ├── cloud.png │ │ │ │ │ ├── list.png │ │ │ │ │ └── member.png │ │ │ │ ├── video.png │ │ │ │ ├── 云端.png │ │ │ │ ├── 列表.png │ │ │ │ └── 资产.png │ │ │ └── scann.png │ │ ├── json │ │ │ ├── apptypes.json │ │ │ ├── content_type.json │ │ │ ├── extTable │ │ │ │ ├── ext1.4.json │ │ │ │ ├── extExtractMsg.json │ │ │ │ ├── extHead.json │ │ │ │ └── relativeExtMsg.json │ │ │ ├── file_lobby_lately_fun.json │ │ │ ├── file_lobby_music_fun.json │ │ │ ├── file_lobby_picture_fun.json │ │ │ ├── file_lobby_video_fun.json │ │ │ ├── main_home_fun.json │ │ │ ├── main_home_util_fun.json │ │ │ ├── themes.json │ │ │ └── worldTab.json │ │ └── setting.json │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ └── srcbox │ │ │ └── file │ │ │ ├── adapter │ │ │ ├── AppFunSelect.kt │ │ │ ├── AppListAdapter.kt │ │ │ ├── AppTypesAdapter.kt │ │ │ ├── ChangeThemeItem.kt │ │ │ ├── ExtractAdapter.kt │ │ │ ├── GuidePager.kt │ │ │ ├── HomeUtilAdapter.kt │ │ │ ├── ImageSelectAdapter.kt │ │ │ ├── MainHomeFunAdapter.kt │ │ │ ├── MainPager.kt │ │ │ ├── MeData.kt │ │ │ ├── MusicDownloadAdapter.kt │ │ │ ├── PopupSelectFileAdapter.kt │ │ │ └── WebResourceBoxAdapter.kt │ │ │ ├── application │ │ │ └── EggApplication.kt │ │ │ ├── base │ │ │ └── BaseContract.kt │ │ │ ├── contract │ │ │ ├── AppListContract.kt │ │ │ ├── ContractShitSmooth.kt │ │ │ └── MainContract.kt │ │ │ ├── data │ │ │ ├── AppFunSelectData.kt │ │ │ ├── AppStorageData.kt │ │ │ ├── ExtractData.kt │ │ │ ├── MusicData.kt │ │ │ ├── PayMessage.kt │ │ │ ├── ResourceData.kt │ │ │ ├── ShowIconData.kt │ │ │ ├── TypeFrameData.kt │ │ │ ├── UserAppData.kt │ │ │ ├── UserTogetherData.kt │ │ │ └── object │ │ │ │ ├── AppSetting.kt │ │ │ │ ├── AppTypes.kt │ │ │ │ ├── CapData.kt │ │ │ │ ├── CapturedImageConfig.kt │ │ │ │ └── ScreenCaptureInfo.kt │ │ │ ├── logic │ │ │ ├── data │ │ │ │ └── MountUserData.kt │ │ │ ├── network │ │ │ │ └── UserService.kt │ │ │ └── object │ │ │ │ ├── MountUser.kt │ │ │ │ └── ServiceCreator.kt │ │ │ ├── model │ │ │ ├── AppListModel.kt │ │ │ ├── MainModel.kt │ │ │ └── ShitSmoothModel.kt │ │ │ ├── payutil │ │ │ ├── Base64.java │ │ │ ├── OrderInfoUtil2_0.java │ │ │ ├── PayConfig.kt │ │ │ ├── PayResult.java │ │ │ └── SignUtils.java │ │ │ ├── presenter │ │ │ ├── AppListPresenter.kt │ │ │ ├── MainPresenter.kt │ │ │ └── ShitSmoothPresenter.kt │ │ │ ├── receiver │ │ │ └── PackageReceiver.kt │ │ │ ├── service │ │ │ ├── CapturedImagesServer.kt │ │ │ └── ShadeService.kt │ │ │ ├── ui │ │ │ ├── AboutActivity.kt │ │ │ ├── AppFunActivity.kt │ │ │ ├── AppList.kt │ │ │ ├── DiyFileTemplateActivity.kt │ │ │ ├── ErrorCrash.kt │ │ │ ├── ExtractManager.kt │ │ │ ├── FloatWin.kt │ │ │ ├── GetMemberActivity.kt │ │ │ ├── ImageSelectActivity.kt │ │ │ ├── MainActivity.kt │ │ │ ├── PlayVideoActivity.kt │ │ │ ├── PointFileExtract.kt │ │ │ ├── SettingActivity.kt │ │ │ ├── ShadeActivity.kt │ │ │ ├── WelcomeActivity.kt │ │ │ ├── apps │ │ │ │ ├── activity │ │ │ │ │ └── AppsActivity.kt │ │ │ │ └── code │ │ │ │ │ └── LoadApps.kt │ │ │ ├── extractManager │ │ │ │ ├── activity │ │ │ │ │ └── ExtractManagerActivity.kt │ │ │ │ └── code │ │ │ │ │ ├── ExtractCacheManager.kt │ │ │ │ │ ├── ExtractInstance.kt │ │ │ │ │ ├── ExtractListener.kt │ │ │ │ │ ├── ExtractManager.kt │ │ │ │ │ ├── ExtractResourceDir.kt │ │ │ │ │ ├── ExtractResourceFormApp.kt │ │ │ │ │ ├── ExtractTaskMessage.kt │ │ │ │ │ └── adapter │ │ │ │ │ └── ExtractItem.kt │ │ │ ├── fragment │ │ │ │ └── main_pager │ │ │ │ │ ├── FragmentFileLobby.kt │ │ │ │ │ ├── FragmentHome.kt │ │ │ │ │ ├── FragmentMe.kt │ │ │ │ │ ├── GuideA.kt │ │ │ │ │ ├── GuideB.kt │ │ │ │ │ ├── GuideC.kt │ │ │ │ │ └── GuideD.kt │ │ │ ├── login │ │ │ │ └── LoginActivity.kt │ │ │ ├── popup │ │ │ │ ├── AppListPopup.kt │ │ │ │ ├── AppMessagePopup.kt │ │ │ │ ├── Bv2AvPopup.kt │ │ │ │ ├── ChangeThemePopup.kt │ │ │ │ ├── CompressImagePopup.kt │ │ │ │ ├── ExtractSrcPopup.kt │ │ │ │ ├── MediaParserPopup.kt │ │ │ │ ├── ParseDouYinMusicPopup.kt │ │ │ │ ├── ParseDouYinPopup.kt │ │ │ │ ├── ParseKuaiShouPopup.kt │ │ │ │ ├── PlayWebVideoPopup.kt │ │ │ │ ├── PublicContent.kt │ │ │ │ ├── SelectAllOrPartPopup.kt │ │ │ │ ├── SelectDownOrShowPopup.kt │ │ │ │ ├── SelectFilePopup.kt │ │ │ │ ├── ShowIconPopup.kt │ │ │ │ ├── SignAProtocolPopup.kt │ │ │ │ ├── SponsorPopup.kt │ │ │ │ ├── TopUpRechargePopup.kt │ │ │ │ ├── UpdateAppPopup.kt │ │ │ │ ├── WebResourceBoxPopup.kt │ │ │ │ ├── WebSourceGetPopup.kt │ │ │ │ └── WebToFileZipPopup.kt │ │ │ ├── screen │ │ │ │ ├── ScreenAccessibility.kt │ │ │ │ ├── ScreenEmptyFragment.kt │ │ │ │ ├── ScreenServices.kt │ │ │ │ ├── Screenshot.kt │ │ │ │ ├── data │ │ │ │ │ └── ScreenNode.kt │ │ │ │ └── popup │ │ │ │ │ └── ScreenPopup.kt │ │ │ ├── searchimginfo │ │ │ │ ├── SearchImgInfoActivity.kt │ │ │ │ ├── SearchImgInfoListAdapter.kt │ │ │ │ └── data │ │ │ │ │ ├── ContentColumnData.kt │ │ │ │ │ └── ImgInfoData.kt │ │ │ ├── userinfo │ │ │ │ ├── UserInfoActivity.kt │ │ │ │ └── UserInfoEmailPopup.kt │ │ │ └── util │ │ │ │ ├── BlindWork.kt │ │ │ │ ├── Bv2AvActivity.kt │ │ │ │ ├── CanSpeak.kt │ │ │ │ ├── DouYinImagesActivity.kt │ │ │ │ ├── FindWordActivity.kt │ │ │ │ ├── GetWebResource.kt │ │ │ │ ├── HexToBinaryActivity.kt │ │ │ │ ├── LockScreenActivity.kt │ │ │ │ ├── MusicDownloadActivity.kt │ │ │ │ ├── ResourceExtractActivity.kt │ │ │ │ ├── ShitSmooth.kt │ │ │ │ ├── WallPaper.kt │ │ │ │ ├── cartoonFormPicture │ │ │ │ ├── CartoonFormPictureActivity.kt │ │ │ │ ├── adapter │ │ │ │ │ └── CartoonAdapter.kt │ │ │ │ └── data │ │ │ │ │ ├── CartoonData.kt │ │ │ │ │ └── DocData.kt │ │ │ │ └── similarsites │ │ │ │ ├── SimilarSites.kt │ │ │ │ └── SimilarSitesActivity.kt │ │ │ ├── util │ │ │ ├── EggIO.kt │ │ │ ├── EggUtil.kt │ │ │ ├── EmailAutoTokenizer.kt │ │ │ ├── GetResourceFormFile.kt │ │ │ ├── GetSrcFormDir.kt │ │ │ ├── GetZipFile.kt │ │ │ ├── GlobUtil.kt │ │ │ ├── LeanQQUtil.kt │ │ │ ├── LoadAppList.kt │ │ │ ├── MediaParse.kt │ │ │ ├── Member.kt │ │ │ ├── ParseDouyinMusic.kt │ │ │ ├── ParseDouyinWateMark.kt │ │ │ ├── ParseKuaiSou.kt │ │ │ ├── ParseUrlUtil.kt │ │ │ ├── ResourceFile.kt │ │ │ ├── ScreenCaptureUtil.kt │ │ │ ├── SpTool.kt │ │ │ ├── ToastUtil.kt │ │ │ ├── WebAllPageSource.kt │ │ │ ├── WebAllPageSourceX.kt │ │ │ ├── WebToFile.kt │ │ │ ├── WordUtil.kt │ │ │ └── resource │ │ │ │ └── extract │ │ │ │ ├── ExtTable.kt │ │ │ │ ├── ResourceData.kt │ │ │ │ ├── ResourceExtractManager.kt │ │ │ │ └── ResourceExtractTask.kt │ │ │ └── view │ │ │ └── StokeRect.kt │ ├── jniLibs │ │ ├── arm64-v8a │ │ │ └── libleancloud-core.so │ │ ├── armeabi-v7a │ │ │ └── libleancloud-core.so │ │ ├── armeabi │ │ │ └── libleancloud-core.so │ │ ├── mips │ │ │ └── libleancloud-core.so │ │ ├── mips64 │ │ │ └── libleancloud-core.so │ │ ├── x86 │ │ │ └── libleancloud-core.so │ │ └── x86_64 │ │ │ └── libleancloud-core.so │ └── res │ │ ├── anim │ │ ├── slide_left_in.xml │ │ ├── slide_left_out.xml │ │ ├── slide_right_in.xml │ │ └── slide_right_out.xml │ │ ├── color │ │ └── fabbg.xml │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── acfun.png │ │ ├── baidu.png │ │ ├── bilibili.png │ │ ├── circle_black_bg.xml │ │ ├── circle_white_bg.xml │ │ ├── eggs.png │ │ ├── file.png │ │ ├── html.png │ │ ├── ic_launcher_background.xml │ │ ├── image.png │ │ ├── more.png │ │ ├── music.png │ │ ├── no_data_cahua.png │ │ ├── paste.png │ │ ├── qq.png │ │ ├── resource_chahua.png │ │ ├── search_add.png │ │ ├── similar_logo.png │ │ ├── tencentvideo.png │ │ ├── text.png │ │ ├── video.png │ │ ├── vip.png │ │ └── wave.png │ │ ├── layout │ │ ├── about.xml │ │ ├── activity_apps.xml │ │ ├── activity_cartoon_form_picture.xml │ │ ├── activity_diy_file_template.xml │ │ ├── activity_find_word.xml │ │ ├── activity_get_member.xml │ │ ├── activity_hex_to_binary.xml │ │ ├── activity_lock_screen.xml │ │ ├── activity_login.xml │ │ ├── activity_main.xml │ │ ├── activity_play_video.xml │ │ ├── activity_point_file_extract.xml │ │ ├── activity_resource_extract.xml │ │ ├── activity_search_img_info.xml │ │ ├── activity_similar_sites.xml │ │ ├── activity_user_info.xml │ │ ├── activity_welcome.xml │ │ ├── app_fun.xml │ │ ├── app_fun_select_recycler_item.xml │ │ ├── app_list.xml │ │ ├── app_list_item.xml │ │ ├── app_message_popup.xml │ │ ├── bottom_sheet_dilog.xml │ │ ├── bv_av_popup.xml │ │ ├── can_speak.xml │ │ ├── cartoon_doc.xml │ │ ├── change_theme_item.xml │ │ ├── change_theme_popup.xml │ │ ├── compress_popup.xml │ │ ├── custom_popup.xml │ │ ├── error_activity.xml │ │ ├── extract_activity.xml │ │ ├── extract_item.xml │ │ ├── extract_item_x.xml │ │ ├── extract_manager.xml │ │ ├── float_win.xml │ │ ├── fragment_file_lobby.xml │ │ ├── fragment_home.xml │ │ ├── fragment_me.xml │ │ ├── get_web_float_win.xml │ │ ├── getwebresource_activity.xml │ │ ├── guide_page_a.xml │ │ ├── guide_page_b.xml │ │ ├── guide_page_c.xml │ │ ├── guide_page_d.xml │ │ ├── home_listv_item.xml │ │ ├── home_util_item.xml │ │ ├── image_select.xml │ │ ├── image_select_item.xml │ │ ├── item_search_img.xml │ │ ├── item_web_resource_box.xml │ │ ├── me_data_item.xml │ │ ├── music_download_activity.xml │ │ ├── music_download_item.xml │ │ ├── parse_dou_yin_music_popup.xml │ │ ├── parse_dou_yin_popup.xml │ │ ├── parse_kuai_shou_popup.xml │ │ ├── play_web_video.xml │ │ ├── popup_media_parser.xml │ │ ├── popup_mp4_to_mp3.xml │ │ ├── popup_screen_show.xml │ │ ├── popup_select_down_or_show.xml │ │ ├── popup_select_file.xml │ │ ├── popup_select_file_item.xml │ │ ├── popup_sign_a_protocol.xml │ │ ├── popup_web_resource_box.xml │ │ ├── public_content_popup.xml │ │ ├── screen_float.xml │ │ ├── select_video_all_or_part.xml │ │ ├── setting.xml │ │ ├── shade_activity.xml │ │ ├── shade_node_panel.xml │ │ ├── shit_smooth.xml │ │ ├── show_icon_popup.xml │ │ ├── top_up_member.xml │ │ ├── top_up_recharge_popup.xml │ │ ├── update_app_popup.xml │ │ ├── user_info_email_popup.xml │ │ ├── view_item_diy_file.xml │ │ ├── view_item_file_type.xml │ │ ├── view_item_friend_app.xml │ │ ├── wall_pager.xml │ │ ├── web_input_popup.xml │ │ └── web_to_file_zip_popup.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ ├── loading.gif │ │ ├── member.png │ │ └── none.png │ │ ├── mipmap-mdpi │ │ ├── add.png │ │ ├── error.png │ │ ├── floating_title.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ ├── placeholder.png │ │ └── select.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ ├── mountain.png │ │ ├── public_content.png │ │ └── update_img.png │ │ ├── mipmap-xxhdpi │ │ ├── apk.png │ │ ├── banner_protocol.png │ │ ├── box_bg.png │ │ ├── dir.png │ │ ├── fmark.png │ │ ├── guide_p1.png │ │ ├── guide_p2.png │ │ ├── guide_p3.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ ├── mark_s.png │ │ ├── more.png │ │ ├── music.png │ │ ├── play_video.png │ │ └── zip.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ └── title_head_bg.png │ │ ├── values │ │ ├── colors.xml │ │ ├── dimen.xml │ │ ├── ic_launcher_background.xml │ │ ├── integer.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── accessibility_service_config.xml │ │ └── file_path.xml │ └── test │ └── java │ └── com │ └── srcbox │ └── file │ └── ExampleUnitTest.kt ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle ├── test └── cookie └── vid └── 1627394898791.mp4 /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | 34 | 35 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # mouution_box 2 | # 开源协议 3 | 请遵守BSD协议 4 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /app/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 14 | -------------------------------------------------------------------------------- /app/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /app/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/libs/alipaySdk-15.7.5.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/libs/alipaySdk-15.7.5.aar -------------------------------------------------------------------------------- /app/libs/m3u8download.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/libs/m3u8download.jar -------------------------------------------------------------------------------- /app/libs/open_sdk_3.5.2.152_r9e04b1c_lite.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/libs/open_sdk_3.5.2.152_r9e04b1c_lite.jar -------------------------------------------------------------------------------- /app/local.properties: -------------------------------------------------------------------------------- 1 | ## This file must *NOT* be checked into Version Control Systems, 2 | # as it contains information specific to your local configuration. 3 | # 4 | # Location of the SDK. This is only used by Gradle. 5 | # For customization when using a Version Control System, please read the 6 | # header note. 7 | #Sat Sep 18 14:12:53 CST 2021 8 | sdk.dir=C\:\\Users\\danke\\AppData\\Local\\Android\\Sdk 9 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/release/app-release.apk -------------------------------------------------------------------------------- /app/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.srcbox.file", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 22032100, 15 | "versionName": "2.9.999", 16 | "outputFile": "app-release.apk" 17 | } 18 | ], 19 | "elementType": "File" 20 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/srcbox/file/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.srcbox.file", appContext.packageName) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/assets/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/font/iconfont.ttf -------------------------------------------------------------------------------- /app/src/main/assets/img/home/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/code.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/else.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/else.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/happ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/happ.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/happy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/happy.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/play.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/util.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/util.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/util/cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/util/cloud.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/util/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/util/list.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/util/member.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/util/member.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/video.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/云端.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/云端.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/列表.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/列表.png -------------------------------------------------------------------------------- /app/src/main/assets/img/home/资产.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/home/资产.png -------------------------------------------------------------------------------- /app/src/main/assets/img/scann.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/assets/img/scann.png -------------------------------------------------------------------------------- /app/src/main/assets/json/content_type.json: -------------------------------------------------------------------------------- 1 | { 2 | "png": "image/png", 3 | "jpeg": "image/jpeg", 4 | "m1v": "video/x-mpeg", 5 | "m3u": "audio/mpegurl", 6 | "mp3": "audio/mp3", 7 | "mp4": "video/mpeg4", 8 | "mps": "video/x-mpeg" 9 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/extTable/ext1.4.json: -------------------------------------------------------------------------------- 1 | { 2 | "图片": { 3 | "ffd8ff": "jpg", 4 | "89504e": "png", 5 | "on": true 6 | }, 7 | "动图": { 8 | "474946": "gif", 9 | "on": true 10 | }, 11 | "视频": { 12 | "000000": "mp4", 13 | "on": true 14 | }, 15 | "音频": { 16 | "fffb90": "mp3", 17 | "494433": "mp3", 18 | "on": true 19 | }, 20 | "压缩包": { 21 | "1f8b08": "gz", 22 | "504b03": "zip", 23 | "on": true 24 | }, 25 | "文档": { 26 | "7b22e6": "json", 27 | "d3cecf": "txt", 28 | "on": true 29 | }, 30 | "OBB": { 31 | "556e69": "", 32 | "on": true 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/extTable/extExtractMsg.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /app/src/main/assets/json/extTable/extHead.json: -------------------------------------------------------------------------------- 1 | { 2 | "图片": [ 3 | "ffd8ff", 4 | "89504e" 5 | ], 6 | "动图": [ 7 | "474946" 8 | ], 9 | "视频": [ 10 | "000000" 11 | ], 12 | "音频": [ 13 | "fffb90", 14 | "494433" 15 | ], 16 | "压缩包": [ 17 | "1f8b08", 18 | "504b03" 19 | ], 20 | "文档": [ 21 | "7b22e6", 22 | "d3cecf" 23 | ] 24 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/extTable/relativeExtMsg.json: -------------------------------------------------------------------------------- 1 | { 2 | "ffd8ff": "jpg", 3 | "89504e": "png", 4 | "474946": "gif", 5 | "000000": "mp4", 6 | "fffb90": "mp3", 7 | "494433": "mp3", 8 | "1f8b08": "gz", 9 | "504b03": "zip", 10 | "7b22e6": "json", 11 | "d3cecf": "txt" 12 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/file_lobby_lately_fun.json: -------------------------------------------------------------------------------- 1 | { 2 | "cc": "", 3 | "aa": "", 4 | "vv": "" 5 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/file_lobby_music_fun.json: -------------------------------------------------------------------------------- 1 | { 2 | "v": "", 3 | "r": "", 4 | "d": "", 5 | "vd": "", 6 | "bbf": "", 7 | "bn": "" 8 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/file_lobby_picture_fun.json: -------------------------------------------------------------------------------- 1 | { 2 | "qw": "", 3 | "e": "", 4 | "s": "", 5 | "a": "", 6 | "g": "", 7 | "n": "" 8 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/file_lobby_video_fun.json: -------------------------------------------------------------------------------- 1 | { 2 | "x": "", 3 | "a": "", 4 | "c": "", 5 | "z": "", 6 | "v": "", 7 | "uu": "" 8 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/main_home_fun.json: -------------------------------------------------------------------------------- 1 | { 2 | "游戏": "img/home/play.png", 3 | "工具": "img/home/util.png", 4 | "娱乐": "img/home/happy.png", 5 | "影视": "img/home/video.png", 6 | "编程": "img/home/code.png", 7 | "H软": "img/home/happ.png", 8 | "其他": "img/home/else.png" 9 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/main_home_util_fun.json: -------------------------------------------------------------------------------- 1 | { 2 | "进制转换器$true": "\ue616", 3 | "视频转音频$true": "\ue615", 4 | "视频消音$true": "\ue615", 5 | "汉语字典$true": "\ue627", 6 | "文章生成$false": "\ue62e", 7 | "壁纸获取$false": "\ue855", 8 | "锁屏提取$false": "\ue855", 9 | "好好说话$false": "\ue702", 10 | "Bv转Av$false": "\ue6ac", 11 | "图片压缩$false": "\ue6d3", 12 | "以图搜番$false": "\ue62c", 13 | "抖音解析$false": "\ue609", 14 | "快手解析$false": "\ue60a", 15 | "皮虾视频$false": "\ue60f", 16 | "皮虾评论$false": "\ue60f", 17 | "K歌视频$false": "\uE657", 18 | "K歌音乐$false": "\ue657", 19 | "B站封面$false": "\ue641", 20 | "A站封面$false": "\ue673", 21 | "B站视频$false": "\uE641", 22 | "A站视频$false": "\uE673", 23 | "抖音音乐$false": "\uE609", 24 | "查图信息$false": "\uE855", 25 | "抖音图集$false": "\uE855", 26 | "快手图集$false": "\uE855" 27 | } -------------------------------------------------------------------------------- /app/src/main/assets/json/themes.json: -------------------------------------------------------------------------------- 1 | [ 2 | "#E91E63", 3 | "#F44336", 4 | "#9C27B0", 5 | "#673AB7", 6 | "#3F51B5", 7 | "#2196F3", 8 | "#4CAF50", 9 | "#FF5722" 10 | ] -------------------------------------------------------------------------------- /app/src/main/assets/setting.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaodan/mouution_box/6d6c8a8564609fd99fe55e146b24c05dfd1485c7/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/AppFunSelect.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import android.view.LayoutInflater 6 | import android.view.View 7 | import android.view.ViewGroup 8 | import android.widget.TextView 9 | import androidx.recyclerview.widget.RecyclerView 10 | import com.srcbox.file.R 11 | import com.srcbox.file.application.EggApplication 12 | import com.srcbox.file.data.AppFunSelectData 13 | import com.srcbox.file.data.`object`.AppSetting 14 | import com.srcbox.file.util.EggUtil 15 | import kotlinx.android.synthetic.main.app_fun_select_recycler_item.view.* 16 | 17 | class AppFunSelect(val context: Context, private val arrayList: ArrayList) : 18 | RecyclerView.Adapter() { 19 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { 20 | return ViewHolder( 21 | LayoutInflater.from(parent.context) 22 | .inflate(R.layout.app_fun_select_recycler_item, parent, false) 23 | ) 24 | } 25 | 26 | override fun getItemCount(): Int { 27 | return arrayList.size 28 | } 29 | 30 | override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 31 | if (holder is ViewHolder) { 32 | holder.bind(position) 33 | } 34 | } 35 | 36 | inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 37 | fun bind(position: Int) { 38 | 39 | // itemView.app_fun_type_select.isSelected = arrayList[position].isSelect 40 | itemView.app_fun_type_title.text = arrayList[position] 41 | itemView.setOnClickListener { 42 | EggUtil.copyText( 43 | context as Activity, 44 | itemView.app_fun_type_title.text.toString() 45 | ) 46 | EggUtil.toast("已复制") 47 | } 48 | 49 | itemView.setOnLongClickListener { 50 | EggUtil.copyText( 51 | context as Activity, 52 | itemView.app_fun_type_title.text.toString() 53 | ) 54 | EggUtil.toast("已复制") 55 | false 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/ChangeThemeItem.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import android.content.Context 4 | import android.graphics.Color 5 | import android.view.LayoutInflater 6 | import android.view.View 7 | import android.view.ViewGroup 8 | import androidx.recyclerview.widget.RecyclerView 9 | import com.alibaba.fastjson.JSONArray 10 | import com.srcbox.file.R 11 | import com.srcbox.file.data.`object`.AppSetting 12 | import com.srcbox.file.ui.popup.ChangeThemePopup 13 | import com.srcbox.file.util.EggUtil 14 | import com.srcbox.file.util.SpTool 15 | import kotlinx.android.synthetic.main.change_theme_item.view.* 16 | 17 | 18 | class ChangeThemeItem(val changeThemePopup: ChangeThemePopup, val arrayL: JSONArray) : 19 | RecyclerView.Adapter() { 20 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { 21 | return ViewHolder( 22 | LayoutInflater.from(parent.context).inflate(R.layout.change_theme_item, parent, false) 23 | ) 24 | } 25 | 26 | override fun getItemCount(): Int { 27 | return arrayL.size 28 | } 29 | 30 | override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 31 | if (holder is ViewHolder) { 32 | holder.bind(position) 33 | } 34 | } 35 | 36 | inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 37 | fun bind(position: Int) { 38 | val color = arrayL.getString(position) 39 | itemView.theme_text.text = color 40 | itemView.theme_text.setTextColor(Color.parseColor(color)) 41 | itemView.setOnClickListener { 42 | val rgbS = EggUtil.toRgba(Color.parseColor(color)) 43 | val rgbInt = Color.argb(22, rgbS[0], rgbS[1], rgbS[2]) 44 | SpTool.putSettingString("themeColor", color) 45 | SpTool.putSettingString("themeTransColor", rgbInt.toString()) 46 | AppSetting.colorStress = color 47 | AppSetting.colorTransTress = "#${rgbInt.toString(16)}" 48 | changeThemePopup.dismiss() 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/ExtractAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import android.view.LayoutInflater 4 | import android.view.View 5 | import android.view.ViewGroup 6 | import androidx.recyclerview.widget.RecyclerView 7 | import com.srcbox.file.R 8 | import com.srcbox.file.data.ExtractData 9 | import kotlinx.android.synthetic.main.extract_item.view.* 10 | 11 | class ExtractAdapter(private val arrayList: ArrayList): RecyclerView.Adapter() { 12 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { 13 | return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.extract_item,parent,false)) 14 | } 15 | 16 | override fun getItemCount(): Int { 17 | return arrayList.size 18 | } 19 | 20 | override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 21 | if (holder is ViewHolder){ 22 | holder.bind(position) 23 | } 24 | } 25 | 26 | inner class ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){ 27 | fun bind(position: Int){ 28 | val arrayO = arrayList[position] 29 | itemView.ext_text.text = arrayO.fileName 30 | itemView.ext_progress.max = arrayO.fileSize.toInt() 31 | itemView.ext_progress.progress = arrayO.fileProgressThis.toInt() 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/GuidePager.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import androidx.fragment.app.Fragment 4 | import androidx.fragment.app.FragmentManager 5 | import androidx.fragment.app.FragmentPagerAdapter 6 | 7 | class GuidePager(fragmentManager: FragmentManager, private val fragments:ArrayList) :FragmentPagerAdapter(fragmentManager,FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT){ 8 | override fun getItem(position: Int): Fragment { 9 | return fragments[position] 10 | } 11 | 12 | override fun getCount(): Int { 13 | return fragments.size 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/ImageSelectAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import android.view.LayoutInflater 6 | import android.view.View 7 | import android.view.ViewGroup 8 | import android.widget.ImageView 9 | import androidx.recyclerview.widget.RecyclerView 10 | import com.bumptech.glide.Glide 11 | import com.lxj.xpopup.XPopup 12 | import com.lxj.xpopup.interfaces.XPopupImageLoader 13 | import com.srcbox.file.R 14 | import com.srcbox.file.util.EggUtil 15 | import kotlinx.android.synthetic.main.image_select_item.view.* 16 | import java.io.File 17 | 18 | class ImageSelectAdapter(val context: Context, val arrayList: List) : 19 | RecyclerView.Adapter() { 20 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { 21 | return ViewHolder( 22 | LayoutInflater.from(parent.context).inflate(R.layout.image_select_item, parent, false) 23 | ) 24 | } 25 | 26 | override fun getItemCount(): Int { 27 | return arrayList.size 28 | } 29 | /* 30 | override fun getItemViewType(position: Int): Int { 31 | return position 32 | }*/ 33 | 34 | override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 35 | if (holder is ViewHolder) { 36 | holder.bind(position) 37 | } 38 | } 39 | 40 | inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 41 | fun bind(position: Int) { 42 | Glide.with(context).load(arrayList[position]).placeholder(R.mipmap.placeholder) 43 | .error(R.mipmap.error).into(itemView.img) 44 | 45 | itemView.setOnClickListener { 46 | XPopup.Builder(context) 47 | .asImageViewer(itemView.img, arrayList[position], ImageLoader()).show() 48 | } 49 | } 50 | } 51 | 52 | inner class ImageLoader : XPopupImageLoader { 53 | override fun loadImage(position: Int, uri: Any, imageView: ImageView) { 54 | uri as File 55 | Glide.with(context).load(uri).placeholder(R.mipmap.placeholder).error(R.mipmap.error) 56 | .into(imageView) 57 | } 58 | 59 | override fun getImageFile(context: Context, uri: Any): File? { 60 | 61 | uri as File 62 | println(uri.absolutePath) 63 | // return File("") 64 | return Glide.with(context).downloadOnly().load(uri).submit().get(); 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/MainPager.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import android.view.ViewGroup 4 | import androidx.fragment.app.Fragment 5 | import androidx.fragment.app.FragmentManager 6 | import androidx.fragment.app.FragmentPagerAdapter 7 | 8 | class MainPager(fm: FragmentManager, private val fragmentList: List) : 9 | FragmentPagerAdapter( 10 | fm, 11 | BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 12 | ) { 13 | override fun getItem(position: Int): Fragment { 14 | return fragmentList[position] 15 | } 16 | 17 | override fun getCount(): Int { 18 | return fragmentList.size 19 | } 20 | 21 | override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) { 22 | super.setPrimaryItem(container, position, `object`) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/MeData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import android.view.LayoutInflater 4 | import android.view.View 5 | import android.view.ViewGroup 6 | import android.widget.TextView 7 | import androidx.recyclerview.widget.RecyclerView 8 | import com.srcbox.file.R 9 | import com.srcbox.file.data.UserTogetherData 10 | 11 | class MeData(val arrayList: ArrayList) : 12 | RecyclerView.Adapter() { 13 | 14 | override fun getItemCount(): Int { 15 | return arrayList.size 16 | } 17 | 18 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { 19 | return ViewHolder( 20 | LayoutInflater.from(parent.context).inflate(R.layout.me_data_item, parent, false) 21 | ) 22 | } 23 | 24 | override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 25 | if (holder is ViewHolder) { 26 | holder.bind(position) 27 | } 28 | } 29 | 30 | inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 31 | fun bind(position: Int) { 32 | val numberText = itemView.findViewById(R.id.number_text) 33 | val measureWordText = itemView.findViewById(R.id.measure_word_text) 34 | numberText.text = arrayList[position].numberText 35 | measureWordText.text = arrayList[position].measureWordText 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/adapter/PopupSelectFileAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.adapter 2 | 3 | import android.view.LayoutInflater 4 | import android.view.View 5 | import android.view.ViewGroup 6 | import androidx.recyclerview.widget.RecyclerView 7 | import com.srcbox.file.R 8 | import com.srcbox.file.ui.popup.filter 9 | import kotlinx.android.synthetic.main.popup_select_file_item.view.* 10 | import java.io.File 11 | 12 | class PopupSelectFileAdapter(public val arrayList: ArrayList?) : 13 | RecyclerView.Adapter() { 14 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { 15 | return ViewHolder( 16 | LayoutInflater.from(parent.context) 17 | .inflate(R.layout.popup_select_file_item, parent, false) 18 | ) 19 | } 20 | 21 | override fun getItemCount(): Int { 22 | return arrayList!!.size 23 | } 24 | 25 | override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 26 | if (holder is ViewHolder) { 27 | holder.bind(position) 28 | } 29 | } 30 | 31 | inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 32 | fun bind(position: Int) { 33 | itemView.psi_title.text = arrayList?.get(position)?.name 34 | itemView.setOnClickListener { 35 | currentFile = arrayList?.get(position) 36 | println(currentFile) 37 | arrayList?.clear() 38 | val fl = filter(currentFile?.listFiles()?.toList()) 39 | fl?.let { 40 | arrayList?.addAll(it) 41 | notifyDataSetChanged() 42 | } 43 | 44 | 45 | } 46 | } 47 | } 48 | 49 | companion object { 50 | var currentFile: File? = null 51 | } 52 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/application/EggApplication.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.application 2 | 3 | import android.app.Application 4 | import android.content.Context 5 | import cat.ereza.customactivityoncrash.config.CaocConfig 6 | import cn.leancloud.AVOSCloud 7 | import com.hjq.bar.TitleBar 8 | import com.hjq.bar.style.TitleBarLightStyle 9 | import com.srcbox.file.data.`object`.AppSetting 10 | import com.srcbox.file.logic.`object`.ServiceCreator 11 | import com.srcbox.file.logic.network.UserService 12 | import com.srcbox.file.ui.ErrorCrash 13 | import com.srcbox.file.util.SpTool 14 | import com.tencent.smtt.export.external.TbsCoreSettings 15 | import com.tencent.smtt.sdk.QbSdk 16 | 17 | 18 | class EggApplication : Application() { 19 | companion object { 20 | lateinit var context: Context 21 | var isDebug = false 22 | var isError = true 23 | lateinit var userService:UserService 24 | } 25 | 26 | override fun onCreate() { 27 | super.onCreate() 28 | if (isDebug) { 29 | //慎重使用!!! 这个使用后要注释 30 | /* AVOSCloud.initialize( 31 | this, 32 | "ofdfGpmix6GzKWGHAAcqVI1m-gzGzoHsz", 33 | "yXLaw0DI59FDpFaWSFtlrg9m", 34 | "https://api.aaaaa.ac.cn" 35 | )*/ 36 | } else { 37 | AVOSCloud.initializeSecurely( 38 | this, 39 | "ofdfGpmix6GzKWGHAAcqVI1m-gzGzoHsz", 40 | "https://api.aaaaa.ac.cn" 41 | ) 42 | } 43 | 44 | val map = HashMap() 45 | map[TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER] = true 46 | QbSdk.initTbsSettings(map) 47 | QbSdk.initX5Environment(this, null) 48 | 49 | TitleBar.initStyle(TitleBarLightStyle(this)); 50 | context = applicationContext 51 | userService = ServiceCreator.create() 52 | CaocConfig.Builder.create().errorActivity(ErrorCrash::class.java).apply() 53 | SpTool.setContext(applicationContext) 54 | val p = SpTool.getSettingString( 55 | "fileOutPath", 56 | "山盒2.0" 57 | ) 58 | AppSetting.appFileOut = p 59 | AppSetting.colorStress = SpTool.getSettingString("themeColor", AppSetting.colorStress) 60 | 61 | AppSetting.colorTransTress = 62 | "#${SpTool.getSettingString("themeTransColor", "572626675").toInt() 63 | .toString(16)}" 64 | } 65 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/base/BaseContract.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.base 2 | 3 | interface BaseContract { 4 | interface View { 5 | } 6 | 7 | interface Model { 8 | 9 | } 10 | 11 | interface Presenter { 12 | 13 | } 14 | } 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/contract/AppListContract.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.contract 2 | 3 | import android.content.Context 4 | import com.srcbox.file.base.BaseContract 5 | import com.srcbox.file.data.UserAppData 6 | 7 | interface AppListContract { 8 | interface Model : BaseContract.Model { 9 | fun getInstallAppInfo(context: Context): ArrayList 10 | } 11 | 12 | interface View : BaseContract.View { 13 | fun start() 14 | fun listApp(arrayList: ArrayList) 15 | fun loading() 16 | } 17 | 18 | interface Presenter : BaseContract.Presenter { 19 | fun installAppInfo(sortType: Int) 20 | } 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/contract/ContractShitSmooth.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.contract 2 | 3 | import com.srcbox.file.base.BaseContract 4 | import java.io.InputStream 5 | 6 | class ContractShitSmooth { 7 | interface Model : BaseContract.Model { 8 | fun getShitSmooth(wordFileIn: InputStream, title: String, len: Long): String 9 | } 10 | 11 | interface View : BaseContract.View { 12 | fun resultShitSmooth(string: String) 13 | fun getTitleV(): String 14 | fun getLen(): Long 15 | fun getWordTab(): InputStream 16 | fun copyShitSmooth() 17 | } 18 | 19 | interface Presenter : BaseContract.Presenter { 20 | fun makeShitSmooth() 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/contract/MainContract.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.contract 2 | 3 | import com.alibaba.fastjson.JSONObject 4 | import com.srcbox.file.base.BaseContract 5 | 6 | interface MainContract { 7 | interface Model : BaseContract.Model { 8 | fun getAppUpdateAndNotificationInfo(): JSONObject 9 | fun getNetWorkAppTypes(): JSONObject 10 | } 11 | 12 | interface View : BaseContract.View { 13 | 14 | } 15 | 16 | interface Presenter : BaseContract.Presenter { 17 | fun getNetWorkAppTypes() 18 | fun checkAppUpdateAndNotificationInfo() 19 | } 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/AppFunSelectData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | data class AppFunSelectData(val selectName: String) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/AppStorageData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | import android.content.Context 4 | import android.os.Environment 5 | import com.srcbox.file.application.EggApplication 6 | import com.srcbox.file.data.`object`.AppSetting 7 | import java.io.File 8 | import java.io.InputStream 9 | 10 | class AppStorageData() { 11 | 12 | 13 | companion object { 14 | fun getAppConfigStorage(): File { 15 | return File(EggApplication.context.filesDir, "config") 16 | } 17 | 18 | fun getFileOutFile(): File { 19 | return File(Environment.getExternalStorageDirectory(), AppSetting.appFileOut) 20 | } 21 | 22 | fun getAssetsIn(fileN: String): InputStream { 23 | return EggApplication.context.assets.open(fileN) 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/ExtractData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | data class ExtractData(val fileSize:Long,val fileProgressThis:Long,val fileName:String) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/MusicData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | class MusicData( 4 | val mId: String, 5 | val musicName: String, 6 | val pictureId: String, 7 | val downId: String, 8 | val lyricId: String, 9 | val source: String, 10 | val artist: List 11 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/PayMessage.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | data class PayMessage(val totalAmount:String,val subject:String,val body:String,val outTradeNo:String) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/ResourceData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | import com.tencent.smtt.export.external.interfaces.WebResourceRequest 4 | import okhttp3.MediaType 5 | 6 | data class ResourceData(val title: String, val url: String,val mediaType: MediaType) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/ShowIconData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | import android.graphics.Bitmap 4 | import com.srcbox.file.view.StokeRect 5 | 6 | data class ShowIconData( 7 | val bitmap: Bitmap, 8 | val stokeRect: StokeRect, 9 | val resourceIdName: String 10 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/TypeFrameData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | data class TypeFrameData(val name: String, val imgLink: String) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/UserAppData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | import android.graphics.drawable.Drawable 4 | import java.io.File 5 | 6 | data class UserAppData( 7 | val appSource:File, 8 | val appIcon: Drawable, 9 | val name: String, 10 | val appSize: Int, 11 | val appPackageName: String?, 12 | val appInstallTime: Long, 13 | val isOsApp: Boolean 14 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/UserTogetherData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data 2 | 3 | data class UserTogetherData(val numberText: String, val measureWordText: String) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/object/AppSetting.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data.`object` 2 | 3 | object AppSetting { 4 | val QQ_APP_ID = "101897261" 5 | private const val tag = "#" 6 | const val colorWhiteShadow = "${tag}EFEFEF" 7 | var colorStress = "${tag}2196f3" 8 | const val colorGray = "${tag}cccccc" 9 | var colorTransTress = "${tag}222196f3" 10 | const val netWorkAppTypes = 11 | "https://juyi-1253946182.cos.ap-chengdu.myqcloud.com/mouu/app_types.json" 12 | const val updateLink = "https://juyi-1253946182.cos.ap-chengdu.myqcloud.com/mouu/json/ver2.json" 13 | const val publicContentUrl = 14 | "https://juyi-1253946182.cos.ap-chengdu.myqcloud.com/mouu/json/public_content.json" 15 | var appFileOut = "山盒2.0" 16 | const val QUN_KEY: String = "1oCNJyhSwyS41UHwrD3WKwMpQ8N5RH3Z" 17 | 18 | 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/object/AppTypes.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data.`object` 2 | 3 | import com.alibaba.fastjson.JSONObject 4 | 5 | object AppTypes { 6 | var appTypesData: JSONObject? = null 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/object/CapData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data.`object` 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.graphics.Bitmap 6 | import android.view.accessibility.AccessibilityNodeInfo 7 | 8 | object CapData { 9 | const val OK = -1 10 | const val CANCELED = 0 11 | const val RUNING = 1 12 | var currentState = Activity.RESULT_CANCELED 13 | var isStart = false 14 | var activity: Activity? = null 15 | var intentData: Intent? = null 16 | var resultCode: Int = 0 17 | var rootNode: AccessibilityNodeInfo? = null 18 | const val TYPE_SHOW = 6 19 | const val TYPE_NO_SHOW = 7 20 | var type = TYPE_SHOW 21 | val arrayRectList = ArrayList() 22 | var bitmap: Bitmap? = null 23 | } 24 | 25 | 26 | 27 | /* 28 | 29 | data class CapData(var activity: Activity) : Parcelable { 30 | constructor(source: Parcel) : this( 31 | source.readActivity() 32 | ) 33 | 34 | override fun describeContents() = 0 35 | 36 | override fun writeToParcel(dest: Parcel, flags: Int): Unit = with(dest) { 37 | writeActivity(activity) 38 | } 39 | 40 | private fun writeActivity(activity: Activity) { 41 | this.activity = activity 42 | } 43 | 44 | companion object { 45 | @JvmField 46 | val CREATOR: Parcelable.Creator = object : Parcelable.Creator { 47 | override fun createFromParcel(source: Parcel): CapData = CapData(source) 48 | override fun newArray(size: Int): Array = arrayOfNulls(size) 49 | } 50 | } 51 | } 52 | 53 | private fun Parcel.readActivity(): Activity? { 54 | return null 55 | } 56 | */ 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/object/CapturedImageConfig.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data.`object` 2 | import androidx.collection.ArraySet 3 | object CapturedImageConfig { 4 | val classNames = ArraySet() 5 | var isServerStart = false 6 | var isServerPermission = false 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/data/object/ScreenCaptureInfo.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.data.`object` 2 | 3 | import android.content.Intent 4 | import com.srcbox.file.util.ScreenCaptureUtil 5 | 6 | object ScreenCaptureInfo { 7 | var screenCaptureUtilInterface: ScreenCaptureUtil? = null 8 | var resultCode = 0 9 | var intentData: Intent? = null 10 | val CODE = 1 11 | var isStart = false 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/logic/data/MountUserData.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.logic.data 2 | 3 | data class MountUserData(val name: String, val email: String, val mobil: String) -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/logic/network/UserService.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.logic.network 2 | 3 | import com.srcbox.file.logic.data.MountUserData 4 | import com.srcbox.file.util.SpTool 5 | import okhttp3.ResponseBody 6 | import okhttp3.internal.http.RealResponseBody 7 | import retrofit2.Call 8 | import retrofit2.http.GET 9 | import retrofit2.http.Headers 10 | import retrofit2.http.Query 11 | 12 | interface UserService { 13 | /* 14 | 获取当前用户信息 15 | */ 16 | @GET("/api/user/getuserinfo") 17 | fun getUserInfo(@Query("token") token: String): Call 18 | 19 | /* 20 | 注册账号 21 | */ 22 | @GET("/api/user/register") 23 | fun registerUser( 24 | @Query("username") name: String, 25 | @Query("password") pass: String, 26 | @Query("email") email: String, 27 | @Query("mobile") mobile: String, 28 | @Query("code") code: String 29 | ): Call 30 | 31 | /* 32 | 登录账号 33 | */ 34 | @GET("/api/user/login") 35 | fun loginUser( 36 | @Query("account") account: String, 37 | @Query("password") pass: String 38 | ): Call 39 | 40 | /* 41 | 获取验证码图片 42 | */ 43 | @GET("/captcha") 44 | fun getImageValidCode(): Call 45 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/logic/object/MountUser.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.logic.`object` 2 | 3 | import com.srcbox.file.logic.data.MountUserData 4 | 5 | object MountUser { 6 | val currentUser: MountUserData? = null 7 | // fun getCurrentUser(): MountUserData? = mountUserData 8 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/logic/object/ServiceCreator.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.logic.`object` 2 | 3 | import com.franmontiel.persistentcookiejar.ClearableCookieJar 4 | import com.franmontiel.persistentcookiejar.PersistentCookieJar 5 | import com.franmontiel.persistentcookiejar.cache.SetCookieCache 6 | import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor 7 | import com.srcbox.file.application.EggApplication 8 | import com.srcbox.file.util.SpTool 9 | import okhttp3.Cookie 10 | import okhttp3.CookieJar 11 | import okhttp3.HttpUrl 12 | import okhttp3.OkHttpClient 13 | import retrofit2.Retrofit 14 | import retrofit2.converter.gson.GsonConverterFactory 15 | 16 | 17 | object ServiceCreator { 18 | private const val BASE_URL = "http://192.168.1.54:8045/" 19 | val okHttpClient = OkHttpClient().newBuilder().addInterceptor { 20 | val original = it.request() 21 | val url = original.url.newBuilder() 22 | .addQueryParameter("token", SpTool.getSettingString("token", "")).build() 23 | val req = original.newBuilder().method(original.method, original.body).url(url).build() 24 | it.proceed(req) 25 | } 26 | private val retrofit: Retrofit = 27 | Retrofit.Builder().baseUrl(BASE_URL).client(okHttpClient.build()) 28 | .addConverterFactory(GsonConverterFactory.create()) 29 | .build() 30 | 31 | fun create(serviceClass: Class): T = retrofit.create(serviceClass) 32 | 33 | inline fun create(): T = create(T::class.java) 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/model/AppListModel.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.model 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import com.srcbox.file.contract.AppListContract 6 | import com.srcbox.file.data.UserAppData 7 | import com.srcbox.file.ui.AppList 8 | import com.srcbox.file.util.LoadAppList 9 | 10 | class AppListModel : AppListContract.Model { 11 | override fun getInstallAppInfo(context: Context): ArrayList { 12 | 13 | val loadAppList = LoadAppList(context as Activity) 14 | var inf = loadAppList.getApps() 15 | 16 | 17 | AppList.searchStr.trim() 18 | when (AppList.typeAppsMessage?.get(0).toString()) { 19 | "all" -> { 20 | inf = inf.filter { 21 | (it.name.contains( 22 | AppList.searchStr, 23 | true 24 | ) || it.appPackageName?.contains(AppList.searchStr, true)!!) 25 | } as ArrayList 26 | } 27 | 28 | "os" -> { 29 | inf = inf.filter { 30 | it.isOsApp && (it.name.contains( 31 | AppList.searchStr, 32 | true 33 | ) || it.appPackageName?.contains( 34 | AppList.searchStr 35 | , true 36 | )!!) 37 | } as ArrayList 38 | } 39 | 40 | else -> { 41 | inf = inf.filter { 42 | var b = false 43 | if (it.appPackageName?.isNotEmpty()!!) { 44 | if (AppList.typeAppsMessage!!.contains(it.appPackageName)) { 45 | b = 46 | true && (it.name.contains( 47 | AppList.searchStr, 48 | true 49 | ) || it.appPackageName.contains( 50 | AppList.searchStr 51 | , true 52 | )) 53 | } 54 | } 55 | b 56 | } as ArrayList 57 | } 58 | } 59 | 60 | return inf 61 | } 62 | } 63 | 64 | 65 | /* runOnUiThread { 66 | 67 | }*/ 68 | /* if (AppList.typeAppsMessage?.get(0).toString() != "all") { 69 | 70 | }*/ -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/model/MainModel.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.model 2 | 3 | import com.alibaba.fastjson.JSON 4 | import com.alibaba.fastjson.JSONObject 5 | import com.srcbox.file.contract.MainContract 6 | import com.srcbox.file.data.AppStorageData 7 | import com.srcbox.file.data.`object`.AppSetting 8 | import com.srcbox.file.util.EggIO 9 | import com.srcbox.file.util.EggUtil 10 | import okhttp3.* 11 | import java.io.File 12 | import java.io.IOException 13 | 14 | class MainModel : MainContract.Model { 15 | override fun getAppUpdateAndNotificationInfo(): JSONObject { 16 | TODO("Not yet implemented") 17 | } 18 | 19 | override fun getNetWorkAppTypes():JSONObject { 20 | return JSON.parseObject(EggIO.readFile(AppStorageData.getAssetsIn("json/apptypesx.json"))) 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/model/ShitSmoothModel.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.model 2 | 3 | import com.srcbox.file.contract.ContractShitSmooth 4 | import com.srcbox.file.ui.util.BlindWork 5 | import java.io.InputStream 6 | 7 | class ShitSmoothModel : ContractShitSmooth.Model { 8 | override fun getShitSmooth(wordFileIn: InputStream, title: String, len: Long): String { 9 | return BlindWork().speak( 10 | wordFileIn, 11 | title, 12 | len 13 | ) 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/payutil/PayConfig.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.payutil 2 | 3 | object PayConfig { 4 | const val APP_ID = "2021001161631050" 5 | const val RSA2_PRIVATE = 6 | "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCdKzlW3rpBz78e5FEYa5HDMcVIaJqhA/CLqF+B1KeB+iKk/Dvccex+dLQGVriUMJEm4Z8t6+Xb8yWImA2EakJHNOAKAcKqkCJsj6kR1MksCXnhkn+5+ljVpq5MpnuGJpjY1jWmMqo0G7dSOSWwvsNdCgJXdPnPb248IFxl3uYP2fnLUVkv/p0Hd1x12tSR0VwPastqXLPdIDbF0ASsHYAub56CsbZw9xzF2+jWgkqu5ZJGFoMC9HjGAltPD2DeARpv+G9eAAl97ZI8zhlp+xsQo9iV32CdmPT5wxnpF0RZnL5t/WBL6Ngf9pKIf6joxVZKm373yt8kS/G/zDiqT0k5AgMBAAECggEAXUPLENu2l1saRNCjtuQOaVBdi6xXJflaguV1V2vDwwOWD2WGeDg6aIgEVEad3YI8gGAev3devXi56yafztXnYq3jzMxioihJ5TYS0/v7LOCqrMrsdIY0tQPmJqIcZuz8gqAK0gb6rVVNIcO7s/hfohRQc2l83DV5qsBhVCpDR1/ZZgmPQjGv+A8O6NU6CdfubHsQxAUAo3UtZ7gLi/63SjiKVbeumLtF/oVYNSL7bi6CWOMqhno+2sP97T3gASdFwfGb1ElQnPkgJ+jRMartOKWj40xDxqMAdIvJq1ukCHSkBVVXGmu+l3czbYhcZlTudPgvDVa0IOlhZWtLeDnoaQKBgQDZH75bJaYNTorUJAKKYIbearxIGuFnlUMdcCw4GBIutz92m810ScmEk7kn6a13/s8dhh2b48jDWXeu6uyKIUw8q/ATlLD4bHl5TNULTi54NfhbXO06n+aaFRHo4bUzIg5jVHgJKvR0K2bI3MI8EA7U4ljUwjIDX/pTBCRkp8LnywKBgQC5T1Tep+cJHyIEUyJaLm8uSwdzIuRkfR5hVHIGnGBKwhz4ZlGe7Swnm3McK8D6pnAbyFKCjdi+wGY6KRqg7HLjhi+h2l0U8zblwcTwfx4tKKs46hxgMGQsDdUNb3WpSgkos/RY/JK/6EDhzE/4EL++DCbH0kQn+8miHHtqZpiKiwKBgCqbxSJj8AM6f5oD+w+mw7DQJ2TLCaLnMsWLJtJXPvI1+dlP1/DTLh27U6GWhPlAYuq7UAIwoExduVP1PDgbMrfRUgq1qkkGGIyKXGCclhf3F2buhIt1p65jJiGacZG4RDSP9gJukIxfnAsc720UBaUXSjFubpwk8J3r+Sxbk68jAoGAHQZg+7L+y/31XQoMcmWdgnm8A/uuHFNAo+wPJBvwNSVsVjfohuUNKnL9t6bexiO1oZRh4BMJpO8L1AZGJniCkkKdSVOjirmBmsEb8LNobZhWIUcCBMrvlbrg6QbRPh/biWWOWzXMYoSlTPiseeVdsw3CMUAs7rpQXbTqW8MQF3sCgYBt6AA81C34rgSiV3dLb3324Lgz2MdvI+63q94rI5cm0ckfN/zLdlWsDmAOWJ+fvcdgXvaZ7VnK0B28DDcYAlVQWZhQh1Ra+PT8aTF1gr2YuACNw+WEpwSTVXgGRr4jpTfS8HchqZVQQrl0eU+JtwB+5qdABOwwZBkazNF+RiBPvA==" 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/payutil/PayResult.java: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.payutil; import android.text.TextUtils; import java.util.Map; public class PayResult { private String resultStatus; private String result; private String memo; public PayResult(Map rawResult) { if (rawResult == null) { return; } for (String key : rawResult.keySet()) { if (TextUtils.equals(key, "resultStatus")) { resultStatus = rawResult.get(key); } else if (TextUtils.equals(key, "result")) { result = rawResult.get(key); } else if (TextUtils.equals(key, "memo")) { memo = rawResult.get(key); } } } @Override public String toString() { return "resultStatus={" + resultStatus + "};memo={" + memo + "};result={" + result + "}"; } /** * @return the resultStatus */ public String getResultStatus() { return resultStatus; } /** * @return the memo */ public String getMemo() { return memo; } /** * @return the result */ public String getResult() { return result; } } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/payutil/SignUtils.java: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.payutil; 2 | 3 | import java.security.KeyFactory; 4 | import java.security.PrivateKey; 5 | import java.security.spec.PKCS8EncodedKeySpec; 6 | 7 | public class SignUtils { 8 | 9 | private static final String ALGORITHM = "RSA"; 10 | 11 | private static final String SIGN_ALGORITHMS = "SHA1WithRSA"; 12 | 13 | private static final String SIGN_SHA256RSA_ALGORITHMS = "SHA256WithRSA"; 14 | 15 | private static final String DEFAULT_CHARSET = "UTF-8"; 16 | 17 | private static String getAlgorithms(boolean rsa2) { 18 | return rsa2 ? SIGN_SHA256RSA_ALGORITHMS : SIGN_ALGORITHMS; 19 | } 20 | 21 | public static String sign(String content, String privateKey, boolean rsa2) { 22 | try { 23 | PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( 24 | Base64.decode(privateKey)); 25 | KeyFactory keyf = KeyFactory.getInstance(ALGORITHM); 26 | PrivateKey priKey = keyf.generatePrivate(priPKCS8); 27 | 28 | java.security.Signature signature = java.security.Signature 29 | .getInstance(getAlgorithms(rsa2)); 30 | 31 | signature.initSign(priKey); 32 | signature.update(content.getBytes(DEFAULT_CHARSET)); 33 | 34 | byte[] signed = signature.sign(); 35 | 36 | return Base64.encode(signed); 37 | } catch (Exception e) { 38 | e.printStackTrace(); 39 | } 40 | 41 | return null; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/presenter/AppListPresenter.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.presenter 2 | 3 | import android.content.Context 4 | import com.srcbox.file.contract.AppListContract 5 | import com.srcbox.file.model.AppListModel 6 | import com.srcbox.file.ui.AppList 7 | 8 | class AppListPresenter(val v: AppListContract.View) : AppListContract.Presenter { 9 | private val appListModel = AppListModel() 10 | private var t: Thread? = null 11 | override fun installAppInfo(sortType: Int) { 12 | v.start() 13 | t = Thread { 14 | v.loading() 15 | val arrL = appListModel.getInstallAppInfo(v as Context) 16 | when (sortType) { 17 | AppList.sortSizeType -> { 18 | arrL.sortByDescending { it.appSize } 19 | } 20 | 21 | AppList.sortTimeType -> { 22 | arrL.sortByDescending { it.appInstallTime } 23 | } 24 | } 25 | v.listApp(arrL) 26 | } 27 | t?.start() 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/presenter/MainPresenter.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.presenter 2 | 3 | import com.alibaba.fastjson.JSONArray 4 | import com.srcbox.file.contract.MainContract 5 | import com.srcbox.file.model.MainModel 6 | 7 | class MainPresenter(val v: MainContract.View) : MainContract.Presenter { 8 | private val mainModel: MainContract.Model = MainModel() 9 | override fun getNetWorkAppTypes() { 10 | /*val joIt = mainModel.getNetWorkAppTypes() 11 | val appTypesJsonObject = joIt.getJSONObject("apptypes") 12 | val allJ = JSONArray() 13 | val osJ = JSONArray() 14 | allJ.add("all") 15 | osJ.add("os") 16 | appTypesJsonObject["全部\$\ue610"] = 17 | allJ 18 | appTypesJsonObject["系统\$\ue64c"] = 19 | osJ*/ 20 | } 21 | 22 | override fun checkAppUpdateAndNotificationInfo() { 23 | 24 | } 25 | } 26 | 27 | /* 28 | val appTypesName = "appTypes.json" 29 | val version = 1 30 | val currentVersion = jsonObject.getInt("version") 31 | if (currentVersion > version) {} 32 | */ -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/presenter/ShitSmoothPresenter.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.presenter 2 | 3 | import android.content.Context 4 | import com.srcbox.file.contract.ContractShitSmooth 5 | import com.srcbox.file.model.ShitSmoothModel 6 | import com.srcbox.file.util.EggUtil 7 | 8 | class ShitSmoothPresenter(val view: ContractShitSmooth.View) : ContractShitSmooth.Presenter { 9 | private val shitSmoothModel = ShitSmoothModel() 10 | override fun makeShitSmooth() { 11 | if (view.getTitleV().isEmpty() || view.getLen() == 0L) { 12 | EggUtil.toast("参数不能为空") 13 | } 14 | view.resultShitSmooth( 15 | shitSmoothModel.getShitSmooth( 16 | view.getWordTab(), 17 | view.getTitleV(), 18 | view.getLen() 19 | ) 20 | ) 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/receiver/PackageReceiver.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.receiver 2 | 3 | import android.content.BroadcastReceiver 4 | import android.content.Context 5 | import android.content.Intent 6 | 7 | class PackageReceiver: BroadcastReceiver(){ 8 | 9 | companion object { 10 | var selPackageName = "" 11 | } 12 | override fun onReceive(context: Context?, intent: Intent?) { 13 | val packageName = intent?.dataString 14 | if (intent!!.action == Intent.ACTION_PACKAGE_REMOVED){ 15 | if (packageName == selPackageName){ 16 | 17 | } 18 | } 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/ImageSelectActivity.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui 2 | 3 | import android.os.Bundle 4 | import androidx.appcompat.app.AppCompatActivity 5 | import androidx.recyclerview.widget.StaggeredGridLayoutManager 6 | import com.srcbox.file.R 7 | import com.srcbox.file.adapter.ImageSelectAdapter 8 | import com.srcbox.file.util.GlobUtil 9 | import kotlinx.android.synthetic.main.image_select.* 10 | import java.io.File 11 | 12 | class ImageSelectActivity : AppCompatActivity() { 13 | private var fileArr = ArrayList() 14 | override fun onCreate(savedInstanceState: Bundle?) { 15 | super.onCreate(savedInstanceState) 16 | setContentView(R.layout.image_select) 17 | GlobUtil.changeTitle(this, false) 18 | val filePath = intent.getStringExtra("filePath") 19 | path_text.text = filePath 20 | val f = File(filePath!!) 21 | listFile(f) 22 | fileArr = fileArr.filter { 23 | it.absolutePath.endsWith(".png") || it.absolutePath.endsWith(".jpg") || it.absolutePath.endsWith( 24 | ".gif" 25 | ) 26 | } as ArrayList 27 | image_select_r.layoutManager = 28 | StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL) 29 | image_select_r.adapter = ImageSelectAdapter(this, fileArr) 30 | } 31 | 32 | private fun listFile(file: File) { 33 | if (file.isDirectory) { 34 | // fileArr.addAll(file.listFiles()!!) 35 | file.listFiles()!!.forEach { 36 | listFile(it) 37 | } 38 | } 39 | if (file.isDirectory) { 40 | fileArr.addAll(file.listFiles()!!) 41 | } else { 42 | fileArr.add(file) 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/PlayVideoActivity.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui 2 | 3 | import android.annotation.SuppressLint 4 | import android.graphics.Bitmap 5 | import androidx.appcompat.app.AppCompatActivity 6 | import android.os.Bundle 7 | import com.lxj.xpopup.XPopup 8 | import com.srcbox.file.R 9 | import com.srcbox.file.util.GlobUtil 10 | import com.tencent.smtt.sdk.WebView 11 | import com.tencent.smtt.sdk.WebViewClient 12 | 13 | class PlayVideoActivity : AppCompatActivity() { 14 | @SuppressLint("SetJavaScriptEnabled") 15 | override fun onCreate(savedInstanceState: Bundle?) { 16 | super.onCreate(savedInstanceState) 17 | setContentView(R.layout.activity_play_video) 18 | GlobUtil.changeTitle(this) 19 | val asLoading = XPopup.Builder(this).asLoading() 20 | asLoading.show() 21 | val webView = findViewById(R.id.video_web) 22 | webView.settings.javaScriptEnabled = true 23 | webView.settings.useWideViewPort = true 24 | webView.settings.loadWithOverviewMode = true 25 | webView.settings.blockNetworkImage = false 26 | webView.settings.blockNetworkLoads = false 27 | webView.settings.domStorageEnabled = true 28 | webView.settings.builtInZoomControls = true 29 | webView.settings.displayZoomControls = false 30 | webView.settings.setGeolocationEnabled(true) 31 | webView.settings.setSupportZoom(true) 32 | webView.loadUrl(intent.getStringExtra("url")) 33 | webView.webViewClient = object : WebViewClient() { 34 | override fun onPageFinished(p0: WebView?, p1: String?) { 35 | super.onPageFinished(p0, p1) 36 | asLoading.dismiss() 37 | } 38 | 39 | override fun onPageStarted(p0: WebView?, p1: String?, p2: Bitmap?) { 40 | super.onPageStarted(p0, p1, p2) 41 | } 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/apps/activity/AppsActivity.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui.apps.activity 2 | 3 | import androidx.appcompat.app.AppCompatActivity 4 | import android.os.Bundle 5 | import com.srcbox.file.R 6 | 7 | class AppsActivity : AppCompatActivity() { 8 | 9 | override fun onCreate(savedInstanceState: Bundle?) { 10 | super.onCreate(savedInstanceState) 11 | setContentView(R.layout.activity_apps) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/apps/code/LoadApps.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui.apps.code 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/extractManager/code/ExtractInstance.kt: -------------------------------------------------------------------------------- 1 | package com.egg.extractmanager 2 | 3 | import com.srcbox.file.ui.extractManager.code.ExtractTaskMessage 4 | import java.io.Serializable 5 | 6 | interface ExtractInstance : Serializable { 7 | 8 | //开始 9 | fun start() 10 | 11 | //暂停 12 | fun pause() 13 | 14 | //关闭 15 | fun cancel() 16 | 17 | //设置监听 18 | fun setListener(extractListener: ExtractListener?) 19 | 20 | //获得监听 21 | fun getListener(): ExtractListener? 22 | 23 | //获取状态 24 | fun getState(): Int 25 | 26 | //获取信息 27 | fun getMessages(): ExtractTaskMessage 28 | 29 | //是否为新任务 30 | fun getIsNewTask(): Boolean 31 | 32 | //是否为新任务 33 | fun setIsNewTask(boolean: Boolean) 34 | 35 | //设置当前索引 36 | fun setPosition(int: Int) 37 | 38 | //初始化状态 39 | fun initData() 40 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/extractManager/code/ExtractListener.kt: -------------------------------------------------------------------------------- 1 | package com.egg.extractmanager 2 | 3 | interface ExtractListener { 4 | fun onProgress(float: Float) 5 | fun onStart() 6 | fun onPause() 7 | fun onCancel() 8 | fun onSuccess() 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/extractManager/code/ExtractResourceDir.kt: -------------------------------------------------------------------------------- 1 | package com.egg.extractmanager 2 | 3 | class ExtractResourceDir { 4 | 5 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/extractManager/code/ExtractTaskMessage.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui.extractManager.code 2 | 3 | import java.io.File 4 | import java.io.Serializable 5 | 6 | data class ExtractTaskMessage( 7 | val file: File, 8 | val appName: String, 9 | var state: Int = -1, 10 | var total: Int = 0, 11 | var thisFilePos: Int = 0 12 | ) : 13 | Serializable -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/fragment/main_pager/GuideA.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui.fragment.main_pager 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.fragment.app.Fragment 8 | import com.bumptech.glide.Glide 9 | import com.srcbox.file.R 10 | import com.srcbox.file.application.EggApplication 11 | import com.srcbox.file.util.EggUtil 12 | 13 | class GuideA : Fragment() { 14 | override fun onCreateView( 15 | inflater: LayoutInflater, 16 | container: ViewGroup?, 17 | savedInstanceState: Bundle? 18 | ): View? { 19 | val v = LayoutInflater.from(context).inflate(R.layout.guide_page_a, container, false) 20 | Glide.with(this).load(R.mipmap.guide_p1).into(v.findViewById(R.id.guide_p1)) 21 | EggUtil.setViewRadius(v, "#ffffff", 1, "#ffffff", EggUtil.dp2px(EggApplication.context,8f).toFloat()) 22 | v.setOnClickListener { 23 | EggUtil.toast("请左右滑动") 24 | } 25 | return v 26 | } 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/fragment/main_pager/GuideB.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui.fragment.main_pager 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.fragment.app.Fragment 8 | import com.bumptech.glide.Glide 9 | import com.srcbox.file.R 10 | import com.srcbox.file.application.EggApplication 11 | import com.srcbox.file.util.EggUtil 12 | 13 | class GuideB : Fragment() { 14 | override fun onCreateView( 15 | inflater: LayoutInflater, 16 | container: ViewGroup?, 17 | savedInstanceState: Bundle? 18 | ): View? { 19 | val v = LayoutInflater.from(context).inflate(R.layout.guide_page_b, container, false) 20 | Glide.with(this).load(R.mipmap.guide_p1).into(v.findViewById(R.id.guide_p2)) 21 | EggUtil.setViewRadius( 22 | v, 23 | "#ffffff", 24 | 1, 25 | "#ffffff", 26 | EggUtil.dp2px(EggApplication.context, 8f).toFloat() 27 | ) 28 | v.setOnClickListener { 29 | EggUtil.toast("请左右滑动") 30 | } 31 | return v 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/fragment/main_pager/GuideC.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui.fragment.main_pager 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.fragment.app.Fragment 8 | import com.bumptech.glide.Glide 9 | import com.srcbox.file.R 10 | import com.srcbox.file.application.EggApplication 11 | import com.srcbox.file.util.EggUtil 12 | 13 | class GuideC : Fragment() { 14 | override fun onCreateView( 15 | inflater: LayoutInflater, 16 | container: ViewGroup?, 17 | savedInstanceState: Bundle? 18 | ): View? { 19 | val v = LayoutInflater.from(context).inflate(R.layout.guide_page_c, container, false) 20 | Glide.with(this).load(R.mipmap.guide_p1).into(v.findViewById(R.id.guide_p3)) 21 | EggUtil.setViewRadius(v, "#ffffff", 1, "#ffffff", EggUtil.dp2px(EggApplication.context,8f).toFloat()) 22 | v.setOnClickListener { 23 | EggUtil.toast("请左右滑动") 24 | } 25 | return v 26 | } 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/srcbox/file/ui/fragment/main_pager/GuideD.kt: -------------------------------------------------------------------------------- 1 | package com.srcbox.file.ui.fragment.main_pager 2 | 3 | import android.content.Intent 4 | import android.os.Bundle 5 | import android.view.LayoutInflater 6 | import android.view.View 7 | import android.view.ViewGroup 8 | import android.widget.Button 9 | import android.widget.ImageView 10 | import androidx.fragment.app.Fragment 11 | import com.bumptech.glide.Glide 12 | import com.srcbox.file.R 13 | import com.srcbox.file.application.EggApplication 14 | import com.srcbox.file.ui.MainActivity 15 | import com.srcbox.file.util.EggIO 16 | import com.srcbox.file.util.EggUtil 17 | import com.srcbox.file.util.SpTool 18 | import com.tencent.smtt.sdk.WebView 19 | import www.linwg.org.lib.LCardView 20 | import kotlin.concurrent.thread 21 | import kotlin.system.exitProcess 22 | 23 | 24 | class GuideD : Fragment() { 25 | override fun onCreateView( 26 | inflater: LayoutInflater, 27 | container: ViewGroup?, 28 | savedInstanceState: Bundle? 29 | ): View? { 30 | var isShow = false 31 | val v = LayoutInflater.from(context).inflate(R.layout.guide_page_d, container, false) 32 | Glide.with(this).load(R.mipmap.banner_protocol) 33 | .into(v.findViewById(R.id.title_img)) 34 | v.findViewById(R.id.agree).setOnClickListener { 35 | if (!isShow) { 36 | EggUtil.toast("请查看协议") 37 | return@setOnClickListener 38 | } 39 | 40 | SpTool.putSettingString("once", true.toString()) 41 | startActivity(Intent(activity, MainActivity::class.java)) 42 | activity?.finish() 43 | } 44 | 45 | v.findViewById(R.id.refuse).setOnClickListener { 46 | exitProcess(0) 47 | } 48 | 49 | v.findViewById