├── .gitignore ├── .idea ├── .gitignore ├── .name ├── compiler.xml ├── dbnavigator.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── kotlinc.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro ├── release │ ├── app-release.apk │ └── output-metadata.json └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── coolapk │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── c001apk │ │ │ ├── MyApplication.kt │ │ │ ├── constant │ │ │ └── Constants.kt │ │ │ ├── logic │ │ │ ├── model │ │ │ │ ├── AppResponse.kt │ │ │ │ ├── CheckResponse.kt │ │ │ │ ├── DeviceInfo.kt │ │ │ │ ├── FeedContentResponse.kt │ │ │ │ ├── HomeFeedResponse.kt │ │ │ │ ├── LoginResponse.kt │ │ │ │ ├── ProfileResponse.kt │ │ │ │ ├── SearchTopicResponse.kt │ │ │ │ ├── SearchUserResponse.kt │ │ │ │ ├── TopicLayoutResponse.kt │ │ │ │ └── UserResponse.kt │ │ │ └── network │ │ │ │ ├── Api2ServiceCreator.kt │ │ │ │ ├── ApiService.kt │ │ │ │ ├── ApiServiceCreator.kt │ │ │ │ ├── Network.kt │ │ │ │ └── Repository.kt │ │ │ ├── ui │ │ │ ├── activity │ │ │ │ ├── BaseActivity.kt │ │ │ │ ├── CopyActivity.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── app │ │ │ │ │ ├── AppActivity.kt │ │ │ │ │ └── AppViewModel.kt │ │ │ │ ├── feed │ │ │ │ │ └── FeedActivity.kt │ │ │ │ ├── login │ │ │ │ │ └── LoginActivity.kt │ │ │ │ ├── search │ │ │ │ │ └── SearchActivity.kt │ │ │ │ ├── topic │ │ │ │ │ └── TopicActivity.kt │ │ │ │ ├── user │ │ │ │ │ ├── UserActivity.kt │ │ │ │ │ └── UserViewModel.kt │ │ │ │ └── webview │ │ │ │ │ └── WebViewActivity.kt │ │ │ └── fragment │ │ │ │ ├── BlankFragment.kt │ │ │ │ ├── feed │ │ │ │ ├── FeedContentAdapter.kt │ │ │ │ ├── FeedContentPicAdapter.kt │ │ │ │ ├── FeedContentViewModel.kt │ │ │ │ ├── FeedFragment.kt │ │ │ │ ├── IOnReplyClickContainer.kt │ │ │ │ ├── IOnReplyClickListener.kt │ │ │ │ ├── IOnTotalReplyClickListener.kt │ │ │ │ ├── Reply2ReplyAdapter.kt │ │ │ │ └── total │ │ │ │ │ ├── Reply2ReplyBottomSheetDialog.kt │ │ │ │ │ ├── Reply2ReplyTotalAdapter.kt │ │ │ │ │ └── ReplyTotalViewModel.kt │ │ │ │ ├── home │ │ │ │ ├── HomeFragment.kt │ │ │ │ ├── HomeViewModel.kt │ │ │ │ ├── app │ │ │ │ │ ├── AppItem.kt │ │ │ │ │ ├── AppListAdapter.kt │ │ │ │ │ ├── AppListFragment.kt │ │ │ │ │ └── AppListViewModel.kt │ │ │ │ ├── feed │ │ │ │ │ ├── FeedPicAdapter.kt │ │ │ │ │ ├── HomeFeedAdapter.kt │ │ │ │ │ ├── HomeFeedFragment.kt │ │ │ │ │ ├── HomeFeedViewModel.kt │ │ │ │ │ ├── IconLinkGridCardAdapter.kt │ │ │ │ │ ├── IconMiniScrollCardAdapter.kt │ │ │ │ │ ├── ImageCarouselCardAdapter.kt │ │ │ │ │ └── ImageTextScrollCardAdapter.kt │ │ │ │ ├── follow │ │ │ │ │ ├── FollowFragment.kt │ │ │ │ │ └── FollowViewModel.kt │ │ │ │ ├── ranking │ │ │ │ │ ├── HomeRankingFragment.kt │ │ │ │ │ └── HomeRankingViewModel.kt │ │ │ │ └── topic │ │ │ │ │ ├── TopicFragment.kt │ │ │ │ │ ├── TopicViewModel.kt │ │ │ │ │ └── content │ │ │ │ │ ├── HomeTopicContentAdapter.kt │ │ │ │ │ ├── HomeTopicContentFragment.kt │ │ │ │ │ └── HomeTopicContentViewModel.kt │ │ │ │ ├── meaasge │ │ │ │ ├── MessageAdapter.kt │ │ │ │ ├── MessageFragment.kt │ │ │ │ └── MessageViewModel.kt │ │ │ │ ├── minterface │ │ │ │ ├── IOnBottomClickContainer.kt │ │ │ │ ├── IOnBottomClickListener.kt │ │ │ │ ├── IOnFeedPicClickContainer.kt │ │ │ │ ├── IOnFeedPicClickListener.kt │ │ │ │ ├── IOnTabClickContainer.kt │ │ │ │ └── IOnTabClickListener.kt │ │ │ │ ├── search │ │ │ │ ├── SearchFragment.kt │ │ │ │ ├── history │ │ │ │ │ ├── HistoryAdapter.kt │ │ │ │ │ ├── HistoryDataBaseHelper.kt │ │ │ │ │ ├── HistoryViewModel.kt │ │ │ │ │ └── IOnItemClickListener.kt │ │ │ │ └── result │ │ │ │ │ ├── SearchAppAdapter.kt │ │ │ │ │ ├── SearchContentFragment.kt │ │ │ │ │ ├── SearchContentViewModel.kt │ │ │ │ │ ├── SearchFeedAdapter.kt │ │ │ │ │ ├── SearchResultFragment.kt │ │ │ │ │ ├── SearchTopicAdapter.kt │ │ │ │ │ └── SearchUserAdapter.kt │ │ │ │ ├── settings │ │ │ │ ├── SettingsFragment.kt │ │ │ │ ├── SettingsPreferenceFragment.kt │ │ │ │ └── SettingsViewModel.kt │ │ │ │ └── topic │ │ │ │ ├── TopicFragment.kt │ │ │ │ ├── TopicViewModel.kt │ │ │ │ └── content │ │ │ │ ├── TopicContentAdapter.kt │ │ │ │ ├── TopicContentFragment.kt │ │ │ │ └── TopicContentViewModel.kt │ │ │ ├── util │ │ │ ├── ActivityCollector.kt │ │ │ ├── AddCookiesInterceptor.kt │ │ │ ├── AppBarStateChangeListener.kt │ │ │ ├── Base64Utils.java │ │ │ ├── CookieUtil.kt │ │ │ ├── CountUtil.kt │ │ │ ├── DensityTool.kt │ │ │ ├── EmojiUtil.kt │ │ │ ├── ImageShowUtil.kt │ │ │ ├── LinearItemDecoration.kt │ │ │ ├── LoginUtils.kt │ │ │ ├── NestCollapsingToolbarLayout.kt │ │ │ ├── PrefManager.kt │ │ │ ├── PubDateUtil.kt │ │ │ ├── SpacesItemDecoration.kt │ │ │ ├── ThemeUtils.kt │ │ │ ├── TokenDeviceUtils.kt │ │ │ ├── UrlUtil.kt │ │ │ └── Utils.kt │ │ │ ├── vertical │ │ │ ├── VerticalTabLayout.java │ │ │ ├── adapter │ │ │ │ ├── SimpleTabAdapter.java │ │ │ │ └── TabAdapter.java │ │ │ ├── badgeview │ │ │ │ ├── Badge.java │ │ │ │ ├── BadgeAnimator.java │ │ │ │ ├── DisplayUtil.java │ │ │ │ ├── MathUtil.java │ │ │ │ └── QBadgeView.java │ │ │ ├── util │ │ │ │ ├── DisplayUtil.kt │ │ │ │ └── TabFragmentManager.kt │ │ │ └── widget │ │ │ │ ├── ITabView.java │ │ │ │ ├── QTabView.java │ │ │ │ ├── TabBadgeView.java │ │ │ │ └── TabView.java │ │ │ └── view │ │ │ ├── CenteredImageSpan.kt │ │ │ ├── MyURLSpan.kt │ │ │ └── NestedScrollableHost.kt │ └── res │ │ ├── anim │ │ ├── anim_fade_in.xml │ │ └── anim_fade_out.xml │ │ ├── color │ │ └── home_card_background_color.xml │ │ ├── drawable-v1 │ │ ├── c_coolb.png │ │ ├── c_fived.png │ │ ├── c_fivef.png │ │ ├── c_fivem.png │ │ ├── c_fiveo.png │ │ ├── c_fivey.png │ │ ├── c_fy.png │ │ ├── c_oned.png │ │ ├── c_onef.png │ │ ├── c_onem.png │ │ ├── c_oneo.png │ │ ├── c_oney.png │ │ ├── c_oy.png │ │ ├── c_teny.png │ │ ├── c_twod.png │ │ ├── c_twof.png │ │ ├── c_twom.png │ │ ├── c_twoo.png │ │ ├── c_twoy.png │ │ ├── c_ty.png │ │ ├── coolapk_emotion_100_qqdoge.png │ │ ├── coolapk_emotion_1010.png │ │ ├── coolapk_emotion_1011.png │ │ ├── coolapk_emotion_1012.png │ │ ├── coolapk_emotion_1013.png │ │ ├── coolapk_emotion_1014.png │ │ ├── coolapk_emotion_1015.png │ │ ├── coolapk_emotion_1016.png │ │ ├── coolapk_emotion_1017.png │ │ ├── coolapk_emotion_1018.png │ │ ├── coolapk_emotion_1019.png │ │ ├── coolapk_emotion_101_pyjiaoyi.png │ │ ├── coolapk_emotion_1020.png │ │ ├── coolapk_emotion_1021.png │ │ ├── coolapk_emotion_1022_zhenbuchuo.png │ │ ├── coolapk_emotion_1023_liewenhuke.png │ │ ├── coolapk_emotion_1024.png │ │ ├── coolapk_emotion_1025.png │ │ ├── coolapk_emotion_1026.png │ │ ├── coolapk_emotion_1027.png │ │ ├── coolapk_emotion_1028.png │ │ ├── coolapk_emotion_1029.png │ │ ├── coolapk_emotion_102_fadai.png │ │ ├── coolapk_emotion_1030.png │ │ ├── coolapk_emotion_1031.png │ │ ├── coolapk_emotion_103_nb.png │ │ ├── coolapk_emotion_104.png │ │ ├── coolapk_emotion_105.png │ │ ├── coolapk_emotion_106.png │ │ ├── coolapk_emotion_107.png │ │ ├── coolapk_emotion_108.png │ │ ├── coolapk_emotion_109.png │ │ ├── coolapk_emotion_10_aoman.png │ │ ├── coolapk_emotion_11_yiwen.png │ │ ├── coolapk_emotion_12_wuyu.png │ │ ├── coolapk_emotion_13_huaixiao.png │ │ ├── coolapk_emotion_14_bishi.png │ │ ├── coolapk_emotion_15_fanu.png │ │ ├── coolapk_emotion_16_tuosai.png │ │ ├── coolapk_emotion_17_tushe.png │ │ ├── coolapk_emotion_18_han.png │ │ ├── coolapk_emotion_19_koubi.png │ │ ├── coolapk_emotion_1_hahaha.png │ │ ├── coolapk_emotion_20_qinqin.png │ │ ├── coolapk_emotion_21_penxue.png │ │ ├── coolapk_emotion_22_xiaoyan.png │ │ ├── coolapk_emotion_23_shui.png │ │ ├── coolapk_emotion_24_wuzuixiao.png │ │ ├── coolapk_emotion_25_zaijian.png │ │ ├── coolapk_emotion_26_kelian.png │ │ ├── coolapk_emotion_27_qiang.png │ │ ├── coolapk_emotion_28_ruo.png │ │ ├── coolapk_emotion_29_baoquan.png │ │ ├── coolapk_emotion_2_jingya.png │ │ ├── coolapk_emotion_30_ok.png │ │ ├── coolapk_emotion_31_xiaoku.png │ │ ├── coolapk_emotion_32_heiha.png │ │ ├── coolapk_emotion_33_wulian.png │ │ ├── coolapk_emotion_34_jizhi.png │ │ ├── coolapk_emotion_35_ye.png │ │ ├── coolapk_emotion_36_ku.png │ │ ├── coolapk_emotion_37_doge.png │ │ ├── coolapk_emotion_38_wozuimei.png │ │ ├── coolapk_emotion_39_caidao.png │ │ ├── coolapk_emotion_3_ciya.png │ │ ├── coolapk_emotion_40_aixin.png │ │ ├── coolapk_emotion_41_meigui.png │ │ ├── coolapk_emotion_42_diaoxie.png │ │ ├── coolapk_emotion_43_heixian.png │ │ ├── coolapk_emotion_44_pen.png │ │ ├── coolapk_emotion_45_yinxian.png │ │ ├── coolapk_emotion_46_nanguo.png │ │ ├── coolapk_emotion_47_weiqu.png │ │ ├── coolapk_emotion_48_weiweiyixiao.png │ │ ├── coolapk_emotion_49_huanhu.png │ │ ├── coolapk_emotion_4_liulei.png │ │ ├── coolapk_emotion_50_xinsui.png │ │ ├── coolapk_emotion_51_chigua.png │ │ ├── coolapk_emotion_52_hejiu.png │ │ ├── coolapk_emotion_53_pu.png │ │ ├── coolapk_emotion_54_hongyaowan.png │ │ ├── coolapk_emotion_55_lvyaowan.png │ │ ├── coolapk_emotion_56_dogexiaoku.png │ │ ├── coolapk_emotion_57_dogehechi.png │ │ ├── coolapk_emotion_58_dogeyuanliangta.png │ │ ├── coolapk_emotion_59_erha.png │ │ ├── coolapk_emotion_5_keai.png │ │ ├── coolapk_emotion_60_kuan.png │ │ ├── coolapk_emotion_61_lvmao.png │ │ ├── coolapk_emotion_62_huaji.png │ │ ├── coolapk_emotion_63_liuhanhuaji.png │ │ ├── coolapk_emotion_64_shounuehuaji.png │ │ ├── coolapk_emotion_65_coshuaji.png │ │ ├── coolapk_emotion_66_doujiyanhuaji.png │ │ ├── coolapk_emotion_67_mojinghuaji.png │ │ ├── coolapk_emotion_68.png │ │ ├── coolapk_emotion_69.png │ │ ├── coolapk_emotion_6_weixiao.png │ │ ├── coolapk_emotion_70.png │ │ ├── coolapk_emotion_71.png │ │ ├── coolapk_emotion_72.png │ │ ├── coolapk_emotion_73.png │ │ ├── coolapk_emotion_74.png │ │ ├── coolapk_emotion_75.png │ │ ├── coolapk_emotion_76.png │ │ ├── coolapk_emotion_77.png │ │ ├── coolapk_emotion_78.png │ │ ├── coolapk_emotion_79.png │ │ ├── coolapk_emotion_7_hehe.png │ │ ├── coolapk_emotion_80.png │ │ ├── coolapk_emotion_81_naikezui.png │ │ ├── coolapk_emotion_82_miaomiao.png │ │ ├── coolapk_emotion_83_huoba.png │ │ ├── coolapk_emotion_84_baiyan.png │ │ ├── coolapk_emotion_85.png │ │ ├── coolapk_emotion_86.png │ │ ├── coolapk_emotion_87.png │ │ ├── coolapk_emotion_88.png │ │ ├── coolapk_emotion_89.png │ │ ├── coolapk_emotion_8_piezui.png │ │ ├── coolapk_emotion_90.png │ │ ├── coolapk_emotion_91.png │ │ ├── coolapk_emotion_92.png │ │ ├── coolapk_emotion_93.png │ │ ├── coolapk_emotion_94.png │ │ ├── coolapk_emotion_95_erhading.png │ │ ├── coolapk_emotion_96_kuanlvmao.png │ │ ├── coolapk_emotion_97_haixiu.png │ │ ├── coolapk_emotion_98_wunai.png │ │ ├── coolapk_emotion_99_zhoumei.png │ │ └── coolapk_emotion_9_se.png │ │ ├── drawable │ │ ├── divider.xml │ │ ├── ic_add.xml │ │ ├── ic_at.xml │ │ ├── ic_back.xml │ │ ├── ic_clear_all.xml │ │ ├── ic_close.xml │ │ ├── ic_comment.xml │ │ ├── ic_date.xml │ │ ├── ic_device.xml │ │ ├── ic_forward.xml │ │ ├── ic_home.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_like.xml │ │ ├── ic_logout.xml │ │ ├── ic_message.xml │ │ ├── ic_message1.xml │ │ ├── ic_more.xml │ │ ├── ic_notification_bell.xml │ │ ├── ic_photo.xml │ │ ├── ic_reply.xml │ │ ├── ic_search.xml │ │ ├── ic_setting.xml │ │ ├── ic_thumb.xml │ │ ├── mini_scroll_bg.xml │ │ ├── outline_dark_mode_24.xml │ │ ├── outline_format_color_fill_24.xml │ │ ├── outline_invert_colors_24.xml │ │ ├── outline_palette_24.xml │ │ ├── pic_count_bg.xml │ │ ├── reply2reply_bg.xml │ │ ├── tab_background.xml │ │ ├── tab_background_trans.xml │ │ └── text_scroll_bg.xml │ │ ├── layout │ │ ├── activity_app.xml │ │ ├── activity_copy.xml │ │ ├── activity_feed.xml │ │ ├── activity_login.xml │ │ ├── activity_main.xml │ │ ├── activity_search.xml │ │ ├── activity_topic.xml │ │ ├── activity_user.xml │ │ ├── activity_web_view.xml │ │ ├── dialog_reply_bottom_sheet.xml │ │ ├── dialog_reply_to_reply_bottom_sheet.xml │ │ ├── fragment_blank.xml │ │ ├── fragment_feed.xml │ │ ├── fragment_follow.xml │ │ ├── fragment_home.xml │ │ ├── fragment_home_app.xml │ │ ├── fragment_home_feed.xml │ │ ├── fragment_home_topic.xml │ │ ├── fragment_message.xml │ │ ├── fragment_search.xml │ │ ├── fragment_search_feed.xml │ │ ├── fragment_search_result.xml │ │ ├── fragment_settings.xml │ │ ├── fragment_settings_preference.xml │ │ ├── fragment_topic.xml │ │ ├── fragment_topic_content.xml │ │ ├── item_app.xml │ │ ├── item_feed_content.xml │ │ ├── item_feed_content_pic.xml │ │ ├── item_feed_content_reply_item.xml │ │ ├── item_feed_content_reply_to_reply_item.xml │ │ ├── item_home_feed.xml │ │ ├── item_home_feed_pic.xml │ │ ├── item_home_icon_link_grid_card.xml │ │ ├── item_home_icon_link_grid_card_item.xml │ │ ├── item_home_icon_mini_scroll_card_item.xml │ │ ├── item_home_image_carousel_card.xml │ │ ├── item_home_image_carousel_card_item.xml │ │ ├── item_home_image_text_scroll_card.xml │ │ ├── item_home_image_text_scroll_card_item.xml │ │ ├── item_home_topic.xml │ │ ├── item_message_fff.xml │ │ ├── item_message_mess.xml │ │ ├── item_reply_to_reply_item.xml │ │ ├── item_search_feed.xml │ │ ├── item_search_history.xml │ │ ├── item_search_topic.xml │ │ └── item_search_user.xml │ │ ├── menu │ │ ├── home_feed_menu.xml │ │ ├── message_menu.xml │ │ ├── nav_menu.xml │ │ └── webview_menu.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── values-night │ │ ├── colors.xml │ │ ├── styles.xml │ │ └── themes.xml │ │ ├── values-v31 │ │ └── themes.xml │ │ ├── values │ │ ├── arrays.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ ├── themes.xml │ │ ├── themes_custom.xml │ │ └── themes_overlay.xml │ │ └── xml │ │ ├── backup_rules.xml │ │ ├── data_extraction_rules.xml │ │ └── settings.xml │ └── test │ └── java │ └── com │ └── example │ └── coolapk │ └── ExampleUnitTest.kt ├── build.gradle.kts ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle.kts /.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 | local.properties 16 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | c001apk -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # c001apk 2 | 3 | fake coolapk 4 | 5 | TokenUtil from: [CoolbbsYou](https://github.com/WaitFme/CoolbbsYou) 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | keytest.jks -------------------------------------------------------------------------------- /app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/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.example.c001apk", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 1, 15 | "versionName": "1.0", 16 | "outputFile": "app-release.apk" 17 | } 18 | ], 19 | "elementType": "File" 20 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/example/coolapk/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk 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.example.c001apk", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | 10 | 21 | 24 | 27 | 31 | 34 | 37 | 40 | 43 | 46 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/MyApplication.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk 2 | 3 | import android.annotation.SuppressLint 4 | import android.app.Application 5 | import android.content.Context 6 | import android.util.Log 7 | import android.widget.Toast 8 | import androidx.appcompat.app.AppCompatDelegate 9 | import com.example.c001apk.constant.Constants 10 | import com.example.c001apk.logic.model.CheckResponse 11 | import com.example.c001apk.logic.model.LoginResponse 12 | import com.example.c001apk.util.CookieUtil 13 | import com.example.c001apk.util.PrefManager 14 | import com.example.c001apk.util.TokenDeviceUtils 15 | import com.example.c001apk.util.TokenDeviceUtils.Companion.getTokenV2 16 | import com.google.gson.Gson 17 | import okhttp3.Call 18 | import okhttp3.Callback 19 | import okhttp3.OkHttpClient 20 | import okhttp3.Request 21 | import okhttp3.Response 22 | import java.io.IOException 23 | import kotlin.concurrent.thread 24 | 25 | class MyApplication : Application() { 26 | 27 | override fun onCreate() { 28 | super.onCreate() 29 | 30 | context = applicationContext 31 | 32 | AppCompatDelegate.setDefaultNightMode(PrefManager.darkTheme) 33 | //DynamicColors.applyToActivitiesIfAvailable(this) 34 | } 35 | 36 | companion object { 37 | @SuppressLint("StaticFieldLeak") 38 | lateinit var context: Context 39 | } 40 | 41 | 42 | 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/constant/Constants.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.constant 2 | 3 | object Constants { 4 | const val USER_AGENT ="Dalvik/2.1.0 (Linux; U; Android 13; SM-G977N Build/LMY48Z) (#Build; samsung; SM-G977N; beyond1qlteue-user 13 LMY48Z 701230529 release-keys; 13) +CoolMarket/13.3.1-2307121-universal" 5 | const val APP_LABEL = "token://com.coolapk.market/dcf01e569c1e3db93a3d0fcf191a622c" 6 | const val APP_ID = "com.coolapk.market" 7 | const val REQUEST_WIDTH = "XMLHttpRequest" 8 | const val COOKIE_PREFS = "Cookies_Prefs" 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/AppResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | data class AppResponse(val data: Data){ 4 | 5 | data class Data( 6 | val title:String, 7 | val logo:String, 8 | val id:String, 9 | val version:String, 10 | val apkversioncode:String, 11 | val apksize:String, 12 | val lastupdate:String, 13 | ) 14 | 15 | } 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/CheckResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class CheckResponse(val status: Int?, val message: String?, val data: Data?) { 6 | 7 | data class Data( 8 | val status: Int, 9 | @SerializedName("message_status")val messageStatus: Int?, 10 | val uid: String, 11 | val username: String, 12 | val token: String, 13 | val refreshToken: String, 14 | val userAvatar: String 15 | ) 16 | 17 | } 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/DeviceInfo.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | data class DeviceInfo( 4 | val aid: String, 5 | val mac: String, 6 | val manuFactor: String, 7 | val brand: String, 8 | val model: String, 9 | val buildNumber: String 10 | ) 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/FeedContentResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | data class FeedContentResponse(val data: HomeFeedResponse.Data) 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/LoginResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | data class LoginResponse( 4 | val status: Int, 5 | val messageStatus: Int, 6 | val message: String, 7 | val uid: String, 8 | val username: String, 9 | val token: String, 10 | val refreshToken: String 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/ProfileResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | data class ProfileResponse(val data:SearchUserResponse.Data) 4 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/SearchTopicResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class SearchTopicResponse(val data: List) { 6 | 7 | data class Data( 8 | val logo: String, val title: String, val id: String, val entityType: String, 9 | @SerializedName("hot_num") val hotNum: String, 10 | val commentnum: String, 11 | @SerializedName("feed_comment_num") val feedCommentNum: String, 12 | @SerializedName("alias_title") val aliasTitle: String, 13 | val downnum: String, 14 | val apkname: String 15 | ) 16 | 17 | } 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/SearchUserResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class SearchUserResponse(val data: List) { 6 | 7 | data class Data( 8 | val uid: String, val username: String, val follow: String, val level: String, 9 | val fans: String, val logintime: String, val userAvatar: String, 10 | val experience: Int, val regdate: String, 11 | @SerializedName("next_level_experience") val nextLevelExperience: Int, 12 | val bio: String, val feed: String, val gender: Int, val city: String, 13 | ) 14 | 15 | } 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/TopicLayoutResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class TopicLayoutResponse(val data: Data) { 6 | 7 | data class Data( 8 | val title: String, 9 | val logo: String, 10 | val entityType: String, 11 | val intro: String, 12 | @SerializedName("tag_pics") val tagPics: List, 13 | val tabList: List, 14 | val selectedTab: String 15 | ) 16 | 17 | data class TabList( 18 | val title: String, 19 | val url: String, 20 | @SerializedName("page_name") val pageName: String, 21 | val entityType: String, 22 | val entityId: Int 23 | ) 24 | 25 | } 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/model/UserResponse.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.model 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class UserResponse(val data: Data) { 6 | 7 | data class Data( 8 | val uid: String, 9 | val username: String, 10 | val level: Int, 11 | val displayUsername: String, 12 | val userAvatar: String, 13 | val cover: String, 14 | val selectedTab: String, 15 | val homeTabCardRows: List, 16 | val gender: Int, 17 | val bio: String, 18 | @SerializedName("be_like_num") val beLikeNum: String, 19 | val follow: String, 20 | val fans: String, 21 | val feed: String, 22 | val logintime: String, 23 | val regdate: String 24 | ) 25 | 26 | data class HomeTabCardRows( 27 | val entityType: String, 28 | val entityTemplate: String, 29 | val title: String, 30 | val url: String, 31 | val entities: List, 32 | val entityId: String, 33 | ) 34 | 35 | } 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/network/Api2ServiceCreator.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.network 2 | 3 | import com.example.c001apk.util.AddCookiesInterceptor 4 | import okhttp3.OkHttpClient 5 | import retrofit2.Retrofit 6 | import retrofit2.converter.gson.GsonConverterFactory 7 | 8 | object Api2ServiceCreator { 9 | 10 | private val client: OkHttpClient = OkHttpClient.Builder() 11 | .addInterceptor(AddCookiesInterceptor()) 12 | .build() 13 | 14 | private const val BASE_URL = "https://api2.coolapk.com" 15 | 16 | private val retrofit = Retrofit.Builder() 17 | .baseUrl(BASE_URL) 18 | .addConverterFactory(GsonConverterFactory.create()) 19 | .client(client) 20 | .build() 21 | 22 | fun create(serviceClass: Class): T = retrofit.create(serviceClass) 23 | 24 | inline fun create(): T = create(T::class.java) 25 | 26 | 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/logic/network/ApiServiceCreator.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.logic.network 2 | 3 | import com.example.c001apk.util.AddCookiesInterceptor 4 | import okhttp3.OkHttpClient 5 | import retrofit2.Retrofit 6 | import retrofit2.converter.gson.GsonConverterFactory 7 | 8 | 9 | object ApiServiceCreator { 10 | 11 | private val client: OkHttpClient = OkHttpClient.Builder() 12 | .addInterceptor(AddCookiesInterceptor()) 13 | .build() 14 | 15 | private const val BASE_URL = "https://api.coolapk.com" 16 | 17 | private val retrofit = Retrofit.Builder() 18 | .baseUrl(BASE_URL) 19 | .addConverterFactory(GsonConverterFactory.create()) 20 | .client(client) 21 | .build() 22 | 23 | fun create(serviceClass: Class): T = retrofit.create(serviceClass) 24 | 25 | inline fun create(): T = create(T::class.java) 26 | 27 | 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/activity/BaseActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.activity 2 | 3 | import android.content.res.Resources 4 | import android.graphics.Color 5 | import android.os.Bundle 6 | import com.example.c001apk.util.ActivityCollector 7 | import com.example.c001apk.util.ThemeUtils 8 | import com.google.android.material.color.DynamicColors 9 | import rikka.material.app.MaterialActivity 10 | 11 | abstract class BaseActivity : MaterialActivity() { 12 | 13 | override fun onCreate(savedInstanceState: Bundle?) { 14 | super.onCreate(savedInstanceState) 15 | ActivityCollector.addActivity(this) 16 | } 17 | 18 | override fun onDestroy() { 19 | super.onDestroy() 20 | ActivityCollector.removeActivity(this) 21 | } 22 | 23 | override fun computeUserThemeKey() = ThemeUtils.colorTheme + ThemeUtils.getNightThemeStyleRes(this) 24 | 25 | override fun onApplyTranslucentSystemBars() { 26 | super.onApplyTranslucentSystemBars() 27 | window.statusBarColor = Color.TRANSPARENT 28 | window.navigationBarColor = Color.TRANSPARENT 29 | } 30 | 31 | override fun onApplyUserThemeResource(theme: Resources.Theme, isDecorView: Boolean) { 32 | if (!ThemeUtils.isSystemAccent) theme.applyStyle(ThemeUtils.colorThemeStyleRes, true) 33 | theme.applyStyle(ThemeUtils.getNightThemeStyleRes(this), true) //blackDarkMode 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/activity/CopyActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.activity 2 | 3 | import android.os.Bundle 4 | import com.example.c001apk.databinding.ActivityCopyBinding 5 | 6 | class CopyActivity : BaseActivity() { 7 | 8 | private lateinit var binding: ActivityCopyBinding 9 | 10 | override fun onCreate(savedInstanceState: Bundle?) { 11 | super.onCreate(savedInstanceState) 12 | binding = ActivityCopyBinding.inflate(layoutInflater) 13 | setContentView(binding.root) 14 | 15 | val text = intent.getStringExtra("text") 16 | binding.textView.text = text 17 | 18 | } 19 | 20 | 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/activity/app/AppViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.activity.app 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class AppViewModel : ViewModel() { 10 | 11 | var id = "" 12 | val baseURL = 13 | "#/feed/apkCommentList?isIncludeTop=1&withSortCard=1&id=" 14 | var appId = "" 15 | var page = 1 16 | var isInit = true 17 | var isRefreh = true 18 | var isEnd = false 19 | var isLoadMore = false 20 | 21 | private val getAppInfoData = MutableLiveData() 22 | 23 | val appInfoData = getAppInfoData.switchMap { 24 | Repository.getAppInfo(id) 25 | } 26 | 27 | fun getAppInfo() { 28 | getAppInfoData.value = getAppInfoData.value 29 | } 30 | 31 | 32 | val appCommentList = ArrayList() 33 | 34 | private val getAppCommentData = MutableLiveData() 35 | 36 | val appCommentData = getAppCommentData.switchMap { 37 | Repository.getAppComment(baseURL + appId, page) 38 | } 39 | 40 | fun getAppComment() { 41 | getAppCommentData.value = getAppCommentData.value 42 | } 43 | 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/activity/feed/FeedActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.activity.feed 2 | 3 | import android.annotation.SuppressLint 4 | import android.os.Bundle 5 | import androidx.fragment.app.FragmentTransaction 6 | import com.example.c001apk.R 7 | import com.example.c001apk.databinding.ActivityFeedBinding 8 | import com.example.c001apk.ui.activity.BaseActivity 9 | import com.example.c001apk.ui.fragment.feed.FeedFragment 10 | 11 | class FeedActivity : BaseActivity() { 12 | 13 | private lateinit var binding: ActivityFeedBinding 14 | 15 | @SuppressLint("CommitTransaction") 16 | override fun onCreate(savedInstanceState: Bundle?) { 17 | super.onCreate(savedInstanceState) 18 | binding = ActivityFeedBinding.inflate(layoutInflater) 19 | setContentView(binding.root) 20 | 21 | val type = intent.getStringExtra("type") 22 | val id = intent.getStringExtra("id") 23 | val uname = intent.getStringExtra("uname") 24 | //val device = intent.getStringExtra("device") 25 | 26 | if (type == "feed" && supportFragmentManager.findFragmentById(R.id.feedFragment) == null) { 27 | supportFragmentManager 28 | .beginTransaction() 29 | .replace(R.id.feedFragment, FeedFragment.newInstance(id!!, uname!!)) 30 | .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 31 | .commit() 32 | } 33 | 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/activity/search/SearchActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.activity.search 2 | 3 | import android.os.Bundle 4 | import androidx.fragment.app.FragmentTransaction 5 | import com.example.c001apk.R 6 | import com.example.c001apk.databinding.ActivitySearchBinding 7 | import com.example.c001apk.ui.activity.BaseActivity 8 | import com.example.c001apk.ui.fragment.search.SearchFragment 9 | 10 | class SearchActivity : BaseActivity() { 11 | 12 | private lateinit var binding: ActivitySearchBinding 13 | 14 | override fun onCreate(savedInstanceState: Bundle?) { 15 | super.onCreate(savedInstanceState) 16 | binding = ActivitySearchBinding.inflate(layoutInflater) 17 | setContentView(binding.root) 18 | 19 | if (supportFragmentManager.findFragmentById(R.id.searchFragment) == null) { 20 | supportFragmentManager 21 | .beginTransaction() 22 | .replace(R.id.searchFragment, SearchFragment()) 23 | .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 24 | .commit() 25 | } 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/activity/topic/TopicActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.activity.topic 2 | 3 | import android.os.Bundle 4 | import androidx.fragment.app.FragmentTransaction 5 | import com.example.c001apk.R 6 | import com.example.c001apk.databinding.ActivityTopicBinding 7 | import com.example.c001apk.ui.activity.BaseActivity 8 | import com.example.c001apk.ui.fragment.topic.TopicFragment 9 | 10 | class TopicActivity : BaseActivity() { 11 | 12 | private lateinit var binding: ActivityTopicBinding 13 | 14 | override fun onCreate(savedInstanceState: Bundle?) { 15 | super.onCreate(savedInstanceState) 16 | binding = ActivityTopicBinding.inflate(layoutInflater) 17 | setContentView(binding.root) 18 | 19 | val title = intent.getStringExtra("title")!! 20 | 21 | if (supportFragmentManager.findFragmentById(R.id.topicFragment) == null) { 22 | supportFragmentManager 23 | .beginTransaction() 24 | .replace(R.id.topicFragment, TopicFragment.newInstance(title, "")) 25 | .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 26 | .commit() 27 | } 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/activity/user/UserViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.activity.user 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.FeedContentResponse 7 | import com.example.c001apk.logic.model.HomeFeedResponse 8 | import com.example.c001apk.logic.network.Repository 9 | 10 | class UserViewModel : ViewModel() { 11 | 12 | var id = "" 13 | var uid = "" 14 | var page = 1 15 | var isInit = true 16 | var isRefreh = true 17 | var isEnd = false 18 | var isLoadMore = false 19 | 20 | private val getUserData = MutableLiveData() 21 | 22 | val userData = getUserData.switchMap { 23 | Repository.getUserSpace(id) 24 | } 25 | 26 | fun getUser() { 27 | getUserData.value = getUserData.value 28 | } 29 | 30 | 31 | val feedContentList = ArrayList() 32 | 33 | private val getUserFeedData = MutableLiveData() 34 | 35 | val userFeedData = getUserFeedData.switchMap { 36 | Repository.getUserFeed(uid, page) 37 | } 38 | 39 | fun getUserFeed() { 40 | getUserFeedData.value = getUserFeedData.value 41 | } 42 | 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/BlankFragment.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment 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.example.c001apk.databinding.FragmentBlankBinding 9 | import com.example.c001apk.util.CookieUtil 10 | 11 | private const val ARG_PARAM1 = "param1" 12 | private const val ARG_PARAM2 = "param2" 13 | 14 | class BlankFragment : Fragment() { 15 | 16 | private var param1: String? = null 17 | private var param2: String? = null 18 | private lateinit var binding: FragmentBlankBinding 19 | 20 | companion object { 21 | @JvmStatic 22 | fun newInstance(param1: String, param2: String) = 23 | BlankFragment().apply { 24 | arguments = Bundle().apply { 25 | putString(ARG_PARAM1, param1) 26 | putString(ARG_PARAM2, param2) 27 | } 28 | } 29 | } 30 | 31 | override fun onCreate(savedInstanceState: Bundle?) { 32 | super.onCreate(savedInstanceState) 33 | arguments?.let { 34 | param1 = it.getString(ARG_PARAM1) 35 | param2 = it.getString(ARG_PARAM2) 36 | } 37 | } 38 | 39 | override fun onCreateView( 40 | inflater: LayoutInflater, container: ViewGroup?, 41 | savedInstanceState: Bundle? 42 | ): View { 43 | binding = FragmentBlankBinding.inflate(inflater, container, false) 44 | return binding.root 45 | } 46 | 47 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 48 | super.onViewCreated(view, savedInstanceState) 49 | 50 | binding.deviceCode.text = CookieUtil.SESSID 51 | //binding.token.text = token 52 | 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/feed/FeedContentViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.feed 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.FeedContentResponse 7 | import com.example.c001apk.logic.model.HomeFeedResponse 8 | import com.example.c001apk.logic.network.Repository 9 | 10 | class FeedContentViewModel : ViewModel() { 11 | 12 | val feedContentList = ArrayList() 13 | val feedReplyList = ArrayList() 14 | 15 | var isRefreshing = true 16 | var isLoadMore = false 17 | var isEnd = false 18 | 19 | var id = "" 20 | 21 | private val getFeedData = MutableLiveData() 22 | 23 | val feedData = getFeedData.switchMap { 24 | Repository.getFeedContent(id) 25 | } 26 | 27 | fun getFeed() { 28 | getFeedData.value = getFeedData.value 29 | } 30 | 31 | var page = 1 32 | var discussMode = 1 33 | var listType = "lastupdate_desc" 34 | 35 | private val getFeedReplyData = MutableLiveData() 36 | 37 | val feedReplyData = getFeedReplyData.switchMap { 38 | Repository.getFeedContentReply(id, discussMode, listType, page) 39 | } 40 | 41 | fun getFeedReply() { 42 | getFeedReplyData.value = getFeedReplyData.value 43 | } 44 | 45 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/feed/IOnReplyClickContainer.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.feed 2 | 3 | interface IOnReplyClickContainer { 4 | companion object{ 5 | var controller: IOnReplyClickListener? = null 6 | } 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/feed/IOnReplyClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.feed 2 | 3 | interface IOnReplyClickListener { 4 | 5 | fun onReply2Reply(id: String, uname: String, type: String) 6 | 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/feed/IOnTotalReplyClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.feed 2 | 3 | interface IOnTotalReplyClickListener { 4 | 5 | fun onShowTotalReply(uid: String, id: String) 6 | 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/feed/total/ReplyTotalViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.feed.total 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class ReplyTotalViewModel : ViewModel() { 10 | 11 | var isEnd = false 12 | var isLoadMore = false 13 | 14 | var page = 1 15 | var id = "" 16 | 17 | val replyTotalList = ArrayList() 18 | 19 | private val getReplyTotalLiveData = MutableLiveData() 20 | 21 | val replyTotalLiveData = getReplyTotalLiveData.switchMap { 22 | Repository.getReply2Reply(id, page) 23 | } 24 | 25 | fun getReplyTotal() { 26 | getReplyTotalLiveData.value = getReplyTotalLiveData.value 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/HomeViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home 2 | 3 | import androidx.lifecycle.ViewModel 4 | 5 | class HomeViewModel : ViewModel() { 6 | 7 | var isInitial = true 8 | 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/app/AppItem.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.app 2 | 3 | import android.graphics.Color 4 | import android.graphics.drawable.ColorDrawable 5 | import android.graphics.drawable.Drawable 6 | 7 | 8 | class AppItem { 9 | var icon: Drawable = ColorDrawable(Color.TRANSPARENT) 10 | var appName: String = "" 11 | var packageName: String = "" 12 | var versionName: String = "" 13 | var isSystem: Boolean = false 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/app/AppListAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.app 2 | 3 | import android.content.Intent 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import android.widget.ImageView 8 | import android.widget.TextView 9 | import androidx.recyclerview.widget.RecyclerView 10 | import com.example.c001apk.R 11 | import com.example.c001apk.ui.activity.app.AppActivity 12 | 13 | class AppListAdapter(private val appList: List) : 14 | RecyclerView.Adapter() { 15 | 16 | class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { 17 | var icon: ImageView = itemView.findViewById(R.id.appIcon) 18 | var appName: TextView = itemView.findViewById(R.id.appName) 19 | var packageName: TextView = itemView.findViewById(R.id.packageName) 20 | var versionName: TextView = itemView.findViewById(R.id.appVersion) 21 | } 22 | 23 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 24 | val view = 25 | LayoutInflater.from(parent.context) 26 | .inflate(R.layout.item_app, parent, false) 27 | val viewHolder = ViewHolder(view) 28 | viewHolder.itemView.setOnClickListener { 29 | val intent = Intent(parent.context, AppActivity::class.java) 30 | intent.putExtra("id", viewHolder.packageName.text) 31 | parent.context.startActivity(intent) 32 | } 33 | return viewHolder 34 | } 35 | 36 | override fun getItemCount() = appList.size 37 | 38 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 39 | val app = appList[position] 40 | holder.icon.setImageDrawable(app.icon) 41 | holder.appName.text = app.appName 42 | holder.packageName.text = app.packageName 43 | holder.versionName.text = app.versionName 44 | 45 | } 46 | 47 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/app/AppListViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.app 2 | 3 | import android.content.Context 4 | import android.content.pm.ApplicationInfo 5 | import android.content.pm.PackageManager 6 | import androidx.lifecycle.MutableLiveData 7 | import androidx.lifecycle.ViewModel 8 | import kotlinx.coroutines.Dispatchers 9 | import kotlinx.coroutines.withContext 10 | import androidx.lifecycle.viewModelScope 11 | import kotlinx.coroutines.launch 12 | 13 | 14 | class AppListViewModel : ViewModel() { 15 | 16 | var isInit = true 17 | val appList = ArrayList() 18 | val items: MutableLiveData> = MutableLiveData() 19 | 20 | fun getItems(context: Context) { 21 | viewModelScope.launch(Dispatchers.IO) { 22 | val appList = context.packageManager 23 | .getInstalledApplications(PackageManager.GET_SHARED_LIBRARY_FILES) 24 | val newItems = ArrayList() 25 | 26 | for (info in appList) { 27 | if (((info.flags and ApplicationInfo.FLAG_SYSTEM) != ApplicationInfo.FLAG_SYSTEM)) { 28 | 29 | val appItem = AppItem().apply { 30 | icon = info.loadIcon(context.packageManager) 31 | appName = info.loadLabel(context.packageManager).toString() 32 | packageName = info.packageName 33 | val packageInfo = context.packageManager.getPackageInfo(info.packageName, 0) 34 | versionName = "${packageInfo.versionName}(${packageInfo.versionCode})" 35 | } 36 | 37 | newItems.add(appItem) 38 | } 39 | } 40 | 41 | withContext(Dispatchers.Main) { 42 | items.value = newItems 43 | } 44 | } 45 | } 46 | 47 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/feed/HomeFeedViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.feed 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class HomeFeedViewModel : ViewModel() { 10 | 11 | val homeFeedList = ArrayList() 12 | 13 | var isRefreshing = true 14 | var isLoadMore = false 15 | 16 | var page = 1 17 | var firstLaunch = 1 18 | var installTime = "" 19 | var lastItem = "" 20 | 21 | private val getHomeFeedData = MutableLiveData() 22 | 23 | val homeFeedData = getHomeFeedData.switchMap { 24 | Repository.getHomeFeed(page, firstLaunch, installTime, lastItem) 25 | } 26 | 27 | fun getHomeFeed() { 28 | getHomeFeedData.value = getHomeFeedData.value 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/feed/IconLinkGridCardAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.feed 2 | 3 | import android.view.LayoutInflater 4 | import android.view.View 5 | import android.view.ViewGroup 6 | import android.widget.ImageView 7 | import android.widget.TextView 8 | import androidx.recyclerview.widget.RecyclerView 9 | import com.example.c001apk.R 10 | import com.example.c001apk.logic.model.HomeFeedResponse 11 | import com.example.c001apk.util.ImageShowUtil 12 | 13 | class IconLinkGridCardAdapter( 14 | private val iconLinkGridCardList: List 15 | ) : 16 | RecyclerView.Adapter() { 17 | 18 | class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { 19 | val title: TextView = view.findViewById(R.id.title) 20 | val iconLinkGridCard: ImageView = view.findViewById(R.id.iconLinkGridCard) 21 | } 22 | 23 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 24 | val view = 25 | LayoutInflater.from(parent.context) 26 | .inflate(R.layout.item_home_icon_link_grid_card_item, parent, false) 27 | return ViewHolder(view) 28 | } 29 | 30 | override fun getItemCount() = iconLinkGridCardList.size 31 | 32 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 33 | val iconLinkGridCard = iconLinkGridCardList[position] 34 | holder.title.text = iconLinkGridCard.title 35 | ImageShowUtil.showIMG(holder.iconLinkGridCard, iconLinkGridCard.pic) 36 | } 37 | 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/feed/ImageCarouselCardAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.feed 2 | 3 | import android.annotation.SuppressLint 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import android.widget.TextView 8 | import androidx.recyclerview.widget.RecyclerView 9 | import com.example.c001apk.R 10 | import com.example.c001apk.logic.model.HomeFeedResponse 11 | import com.example.c001apk.util.ImageShowUtil 12 | import com.google.android.material.imageview.ShapeableImageView 13 | 14 | class ImageCarouselCardAdapter( 15 | private val imageCarouselCardList: List 16 | ) : 17 | RecyclerView.Adapter() { 18 | 19 | class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { 20 | val imageCarouselCard: ShapeableImageView = view.findViewById(R.id.imageCarouselCard) 21 | val count: TextView = view.findViewById(R.id.count) 22 | } 23 | 24 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 25 | val view = 26 | LayoutInflater.from(parent.context) 27 | .inflate(R.layout.item_home_image_carousel_card_item, parent, false) 28 | return ViewHolder(view) 29 | } 30 | 31 | override fun getItemCount() = imageCarouselCardList.size 32 | 33 | @SuppressLint("SetTextI18n") 34 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 35 | val imageCarouselCard = imageCarouselCardList[position] 36 | ImageShowUtil.showIMG(holder.imageCarouselCard, imageCarouselCard.pic) 37 | holder.count.text = "${position + 1}/${imageCarouselCardList.size}" 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/follow/FollowViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.follow 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class FollowViewModel : ViewModel() { 10 | 11 | var isInit = true 12 | val followFeedList = ArrayList() 13 | 14 | var isRefreshing = true 15 | var isLoadMore = false 16 | 17 | var page = 1 18 | var lastItem = "" 19 | val url = "V9_HOME_TAB_FOLLOW" 20 | val title = "关注" 21 | 22 | private val getFollowFeedData = MutableLiveData() 23 | 24 | val followFeedData = getFollowFeedData.switchMap { 25 | Repository.getFollowFeed(url, title, page) 26 | } 27 | 28 | fun getFollowFeed() { 29 | getFollowFeedData.value = getFollowFeedData.value 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/ranking/HomeRankingViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.ranking 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class HomeRankingViewModel : ViewModel() { 10 | 11 | var isInit = true 12 | val homeRankingList = ArrayList() 13 | 14 | var isRefreshing = true 15 | var isLoadMore = false 16 | 17 | var page = 1 18 | var lastItem = "" 19 | 20 | private val getHomeRankingData = MutableLiveData() 21 | 22 | val homeRankingData = getHomeRankingData.switchMap { 23 | Repository.getHomeRanking(page, lastItem) 24 | } 25 | 26 | fun getHomeRanking() { 27 | getHomeRankingData.value = getHomeRankingData.value 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/topic/TopicViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.topic 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class TopicViewModel : ViewModel() { 10 | 11 | val homeTopicTitleList = ArrayList() 12 | 13 | private val getHomeTopicTitleLiveData = MutableLiveData() 14 | 15 | val homeTopicTitleLiveData = getHomeTopicTitleLiveData.switchMap { 16 | Repository.getHomeTopicTitle() 17 | } 18 | 19 | fun getHomeTopicTitle() { 20 | getHomeTopicTitleLiveData.value = getHomeTopicTitleLiveData.value 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/home/topic/content/HomeTopicContentViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.home.topic.content 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class HomeTopicContentViewModel : ViewModel() { 10 | 11 | var isInit = true 12 | val topicDataList = ArrayList() 13 | 14 | var isRefreshing = true 15 | var isLoadMore = false 16 | var isEnd = false 17 | 18 | var url = "" 19 | var title = "" 20 | var subTitle: String? = null 21 | var page = 1 22 | 23 | private val getTopicDataLiveData = MutableLiveData() 24 | 25 | val topicDataLiveData = getTopicDataLiveData.switchMap { 26 | Repository.getTopicData(url, title, subTitle, page) 27 | } 28 | 29 | fun getTopicData() { 30 | getTopicDataLiveData.value = getTopicDataLiveData.value 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/meaasge/MessageViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.meaasge 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.network.Repository 7 | import com.example.c001apk.util.PrefManager 8 | 9 | class MessageViewModel : ViewModel() { 10 | 11 | private val getProfileDataLiveData = MutableLiveData() 12 | 13 | var uid = 14 | if (PrefManager.isLogin) PrefManager.uid.substring(4, PrefManager.uid.length) 15 | else "" 16 | 17 | val profileDataLiveData = getProfileDataLiveData.switchMap { 18 | Repository.getProfile(uid) 19 | } 20 | 21 | fun getProfile() { 22 | getProfileDataLiveData.value = getProfileDataLiveData.value 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/minterface/IOnBottomClickContainer.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.minterface 2 | 3 | interface IOnBottomClickContainer { 4 | var controller: IOnBottomClickListener? 5 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/minterface/IOnBottomClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.minterface 2 | 3 | interface IOnBottomClickListener { 4 | 5 | fun onReturnTop() 6 | 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/minterface/IOnFeedPicClickContainer.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.minterface 2 | 3 | 4 | interface IOnFeedPicClickContainer { 5 | companion object { 6 | var controller: IOnFeedPicClickListener? = null 7 | } 8 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/minterface/IOnFeedPicClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.minterface 2 | 3 | import cc.shinichi.library.bean.ImageInfo 4 | 5 | interface IOnFeedPicClickListener { 6 | 7 | fun onShowPic(position: Int, urlList: MutableList) 8 | 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/minterface/IOnTabClickContainer.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.minterface 2 | 3 | interface IOnTabClickContainer { 4 | var controller: IOnTabClickListener? 5 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/minterface/IOnTabClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.minterface 2 | 3 | interface IOnTabClickListener { 4 | 5 | fun onReturnTop(position: Int) 6 | 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/search/history/HistoryAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.search.history 2 | 3 | import android.annotation.SuppressLint 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import android.widget.ImageButton 8 | import android.widget.TextView 9 | import androidx.recyclerview.widget.RecyclerView 10 | import com.example.c001apk.R 11 | 12 | class HistoryAdapter(private var historyList: ArrayList) : 13 | RecyclerView.Adapter() { 14 | 15 | private lateinit var iOnItemClickListener: IOnItemClickListener 16 | 17 | fun setOnItemClickListener(iOnItemClickListener: IOnItemClickListener) { 18 | this.iOnItemClickListener = iOnItemClickListener 19 | } 20 | 21 | class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { 22 | var keyWord: TextView = view.findViewById(R.id.keyWord) 23 | val delete: ImageButton = view.findViewById(R.id.delete) 24 | } 25 | 26 | @SuppressLint("NotifyDataSetChanged") 27 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 28 | val view = LayoutInflater.from(parent.context).inflate(R.layout.item_search_history, parent, false) 29 | val viewHolder = ViewHolder(view) 30 | viewHolder.keyWord.setOnLongClickListener { 31 | if (viewHolder.delete.visibility == View.GONE) 32 | viewHolder.delete.visibility = View.VISIBLE 33 | else 34 | viewHolder.delete.visibility = View.GONE 35 | true 36 | } 37 | viewHolder.delete.setOnClickListener { 38 | val position = viewHolder.adapterPosition 39 | iOnItemClickListener.onItemDeleteClick(historyList[position]) 40 | viewHolder.delete.visibility = View.GONE 41 | } 42 | viewHolder.keyWord.setOnClickListener { 43 | val position = viewHolder.adapterPosition 44 | iOnItemClickListener.onItemClick(historyList[position]) 45 | } 46 | return viewHolder 47 | } 48 | 49 | override fun getItemCount() = historyList.size 50 | 51 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 52 | val keyWord = historyList[position] 53 | holder.keyWord.text = keyWord 54 | } 55 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/search/history/HistoryDataBaseHelper.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.search.history 2 | 3 | import android.content.Context 4 | import android.database.sqlite.SQLiteDatabase 5 | import android.database.sqlite.SQLiteOpenHelper 6 | import android.widget.Toast 7 | 8 | class HistoryDataBaseHelper(private val context: Context, name: String, version: Int) : 9 | SQLiteOpenHelper(context, name, null, version) { 10 | 11 | private val createSearchHistory = "create table SearchHistory (" + 12 | "id integer primary key autoincrement, " + 13 | "keyword text)" 14 | 15 | 16 | override fun onCreate(db: SQLiteDatabase) { 17 | db.execSQL(createSearchHistory) 18 | //Toast.makeText(context, "Created", Toast.LENGTH_SHORT).show() 19 | } 20 | 21 | override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { 22 | db.execSQL("drop table if exists SearchHistory") 23 | onCreate(db) 24 | } 25 | 26 | 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/search/history/HistoryViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.search.history 2 | 3 | import androidx.lifecycle.ViewModel 4 | 5 | class HistoryViewModel : ViewModel() { 6 | 7 | var historyList = ArrayList() 8 | 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/search/history/IOnItemClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.search.history 2 | 3 | interface IOnItemClickListener { 4 | fun onItemClick(keyword: String) 5 | fun onItemDeleteClick(keyword: String) 6 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/search/result/SearchAppAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.search.result 2 | 3 | import android.annotation.SuppressLint 4 | import android.content.Intent 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.example.c001apk.R 11 | import com.example.c001apk.logic.model.SearchTopicResponse 12 | import com.example.c001apk.ui.activity.app.AppActivity 13 | import com.example.c001apk.util.CountUtil 14 | import com.example.c001apk.util.ImageShowUtil 15 | import com.google.android.material.imageview.ShapeableImageView 16 | 17 | class SearchAppAdapter( 18 | private val searchList: List 19 | ) : 20 | RecyclerView.Adapter() { 21 | 22 | class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { 23 | val title: TextView = view.findViewById(R.id.title) 24 | val hotNum: TextView = view.findViewById(R.id.hotNum) 25 | val commentNum: TextView = view.findViewById(R.id.commentNum) 26 | val logo: ShapeableImageView = view.findViewById(R.id.logo) 27 | var entityType = "" 28 | var apkName = "" 29 | } 30 | 31 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 32 | val view = 33 | LayoutInflater.from(parent.context) 34 | .inflate(R.layout.item_search_topic, parent, false) 35 | val viewHolder = ViewHolder(view) 36 | viewHolder.itemView.setOnClickListener { 37 | val intent = Intent(parent.context, AppActivity::class.java) 38 | intent.putExtra("id", viewHolder.apkName) 39 | parent.context.startActivity(intent) 40 | } 41 | return viewHolder 42 | } 43 | 44 | override fun getItemCount() = searchList.size 45 | 46 | @SuppressLint("SetTextI18n") 47 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 48 | val app = searchList[position] 49 | holder.apkName = app.apkname 50 | holder.title.text = app.title 51 | holder.commentNum.text = CountUtil.view(app.commentnum) + "讨论" 52 | holder.hotNum.text = CountUtil.view(app.downnum) + "下载" 53 | ImageShowUtil.showIMG(holder.logo, app.logo) 54 | } 55 | 56 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/search/result/SearchContentViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.search.result 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.model.SearchTopicResponse 8 | import com.example.c001apk.logic.model.SearchUserResponse 9 | import com.example.c001apk.logic.network.Repository 10 | 11 | class SearchContentViewModel : ViewModel() { 12 | 13 | var isInit = true 14 | val searchFeedList = ArrayList() 15 | val searchUserList = ArrayList() 16 | val searchTopicList = ArrayList() 17 | 18 | var isRefreshing = true 19 | var isLoadMore = false 20 | var isEnd = false 21 | 22 | var type: String = "" 23 | var feedType: String = "all" 24 | var sort: String = "default" 25 | var keyWord: String = "" 26 | var page = 1 27 | 28 | private val getSearchData = MutableLiveData() 29 | 30 | val searchData = getSearchData.switchMap { 31 | Repository.getSearchFeed(type, feedType, sort, keyWord, page) 32 | } 33 | 34 | fun getSearchFeed() { 35 | getSearchData.value = getSearchData.value 36 | } 37 | 38 | private val getSearchUserData = MutableLiveData() 39 | 40 | val searchUserData = getSearchUserData.switchMap { 41 | Repository.getSearchUser(keyWord, page) 42 | } 43 | 44 | fun getSearchUser() { 45 | getSearchUserData.value = getSearchUserData.value 46 | } 47 | 48 | private val getSearchTopicData = MutableLiveData() 49 | 50 | val searchTopicData = getSearchTopicData.switchMap { 51 | Repository.getSearchTopic(type, keyWord, page) 52 | } 53 | 54 | fun getSearchTopic() { 55 | getSearchTopicData.value = getSearchTopicData.value 56 | } 57 | 58 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/settings/SettingsViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.settings 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.network.Repository 7 | import com.example.c001apk.util.PrefManager 8 | 9 | class SettingsViewModel : ViewModel() { 10 | 11 | private val getProfileDataLiveData = MutableLiveData() 12 | 13 | var uid = 14 | if (PrefManager.isLogin) PrefManager.uid.substring(4, PrefManager.uid.length) 15 | else "" 16 | 17 | val profileDataLiveData = getProfileDataLiveData.switchMap { 18 | Repository.getProfile(uid) 19 | } 20 | 21 | fun getProfile() { 22 | getProfileDataLiveData.value = getProfileDataLiveData.value 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/topic/TopicViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.topic 2 | 3 | import android.widget.Toast 4 | import androidx.lifecycle.MutableLiveData 5 | import androidx.lifecycle.ViewModel 6 | import androidx.lifecycle.switchMap 7 | import com.example.c001apk.MyApplication 8 | import com.example.c001apk.logic.model.HomeFeedResponse 9 | import com.example.c001apk.logic.network.Repository 10 | 11 | class TopicViewModel : ViewModel() { 12 | 13 | var tag = "" 14 | var isInit = true 15 | 16 | private val getTopicLayoutLiveData = MutableLiveData() 17 | 18 | val topicLayoutLiveData = getTopicLayoutLiveData.switchMap { 19 | Repository.getTopicLayout(tag) 20 | } 21 | 22 | fun getTopicLayout() { 23 | getTopicLayoutLiveData.value = getTopicLayoutLiveData.value 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/ui/fragment/topic/content/TopicContentViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.ui.fragment.topic.content 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import com.example.c001apk.logic.model.HomeFeedResponse 7 | import com.example.c001apk.logic.network.Repository 8 | 9 | class TopicContentViewModel : ViewModel() { 10 | 11 | var isInit = true 12 | val topicDataList = ArrayList() 13 | 14 | var isRefreshing = true 15 | var isLoadMore = false 16 | var isEnd = false 17 | 18 | var url = "" 19 | var title = "" 20 | var subTitle: String? = null 21 | var page = 1 22 | 23 | private val getTopicDataLiveData = MutableLiveData() 24 | 25 | val topicDataLiveData = getTopicDataLiveData.switchMap { 26 | Repository.getTopicData(url, title, subTitle, page) 27 | } 28 | 29 | fun getTopicData() { 30 | getTopicDataLiveData.value = getTopicDataLiveData.value 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/ActivityCollector.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.app.Activity 4 | 5 | object ActivityCollector { 6 | 7 | private var activities = mutableListOf() 8 | 9 | fun addActivity(activity: Activity) { 10 | activities.add(activity) 11 | } 12 | 13 | fun removeActivity(activity: Activity) { 14 | activities.remove(activity) 15 | } 16 | 17 | fun finishOneActivity(activityName: String) { 18 | for (activity in activities) { 19 | val name = activity.javaClass.name 20 | if (name == activityName) { 21 | if (activity.isFinishing) { 22 | activities.remove(activity) 23 | } else { 24 | activity.finish() 25 | } 26 | } 27 | } 28 | } 29 | 30 | fun recreateActivity(activityName: String) { 31 | for (activity in activities) { 32 | val name = activity.javaClass.name 33 | if (name == activityName) { 34 | activity.recreate() 35 | } 36 | } 37 | } 38 | 39 | fun finishOtherActivity(activityName: String) { 40 | 41 | for (activity in activities) { 42 | val name = activity.javaClass.name //activity的类名 43 | if (name != activityName) { 44 | if(activity.isFinishing){ 45 | activities.remove(activity) 46 | }else{ 47 | activity.finish() 48 | } 49 | } 50 | } 51 | } 52 | 53 | fun finishAll() { 54 | for (activity in activities) { 55 | if (!activity.isFinishing) { 56 | activity.finish() 57 | } 58 | } 59 | activities.clear() 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/AddCookiesInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import com.example.c001apk.constant.Constants.APP_ID 4 | import com.example.c001apk.constant.Constants.REQUEST_WIDTH 5 | import com.example.c001apk.constant.Constants.USER_AGENT 6 | import com.example.c001apk.util.CookieUtil.SESSID 7 | import com.example.c001apk.util.CookieUtil.deviceCode 8 | import com.example.c001apk.util.CookieUtil.token 9 | import okhttp3.Interceptor 10 | import okhttp3.Request 11 | import okhttp3.Response 12 | import java.io.IOException 13 | 14 | internal class AddCookiesInterceptor : Interceptor { 15 | @Throws(IOException::class) 16 | override fun intercept(chain: Interceptor.Chain): Response { 17 | val builder: Request.Builder = chain.request().newBuilder() 18 | builder.apply { 19 | addHeader("User-Agent", USER_AGENT) 20 | addHeader("X-Requested-With", REQUEST_WIDTH) 21 | addHeader("X-Sdk-Int", "33") 22 | addHeader("X-Sdk-Locale", "zh-CN") 23 | addHeader("X-App-Id", APP_ID) 24 | addHeader("X-App-Token", token) 25 | addHeader("X-App-Version", "13.3.1") 26 | addHeader("X-App-Code", "2307121") 27 | addHeader("X-Api-Version", "13") 28 | addHeader("X-App-Device", deviceCode) 29 | addHeader("X-Dark-Mode", "0") 30 | addHeader("X-App-Channel", "coolapk") 31 | addHeader("X-App-Mode", "universal") 32 | if (PrefManager.isLogin) addHeader( 33 | "Cookie", 34 | "${PrefManager.uid}; ${PrefManager.name}; ${PrefManager.token}" 35 | ) 36 | else addHeader("Cookie", SESSID) 37 | } 38 | return chain.proceed(builder.build()) 39 | } 40 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/AppBarStateChangeListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import com.google.android.material.appbar.AppBarLayout 4 | import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener 5 | 6 | abstract class AppBarStateChangeListener : OnOffsetChangedListener { 7 | 8 | enum class State { 9 | EXPANDED, COLLAPSED, IDLE 10 | } 11 | 12 | private var mCurrentState = State.IDLE 13 | override fun onOffsetChanged(appBarLayout: AppBarLayout, i: Int) { 14 | mCurrentState = if (i == 0) { 15 | if (mCurrentState != State.EXPANDED) { 16 | onStateChanged( 17 | appBarLayout, 18 | State.EXPANDED 19 | ) 20 | } 21 | State.EXPANDED 22 | } else if (Math.abs(i) >= appBarLayout.totalScrollRange) { 23 | if (mCurrentState != State.COLLAPSED) { 24 | onStateChanged( 25 | appBarLayout, 26 | State.COLLAPSED 27 | ) 28 | } 29 | State.COLLAPSED 30 | } else { 31 | if (mCurrentState != State.IDLE) { 32 | onStateChanged( 33 | appBarLayout, 34 | State.IDLE 35 | ) 36 | } 37 | State.IDLE 38 | } 39 | } 40 | 41 | abstract fun onStateChanged(appBarLayout: AppBarLayout?, state: State?) 42 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/CookieUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | object CookieUtil { 4 | 5 | var SESSID = "" 6 | 7 | var deviceCode = "" 8 | 9 | var token = "" 10 | 11 | var RES = "" 12 | 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/CountUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | object CountUtil { 4 | 5 | fun view(view: String): String = 6 | if (view.toLong() >= 10000) 7 | String.format("%.1f", view.toDouble() / 10000) + "万" 8 | else 9 | view 10 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/DensityTool.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.content.Context 4 | import android.content.res.Resources 5 | import android.util.TypedValue 6 | 7 | 8 | object DensityTool { 9 | 10 | fun getScreenWidth(context: Context): Int { 11 | return context.resources.displayMetrics.widthPixels 12 | } 13 | 14 | fun dp2px(context: Context, dp: Float): Float { 15 | return TypedValue.applyDimension( 16 | TypedValue.COMPLEX_UNIT_DIP, 17 | dp, 18 | context.resources.displayMetrics 19 | ) 20 | } 21 | 22 | fun px2dp(pxValue: Float): Float { 23 | return pxValue / Resources.getSystem().displayMetrics.density 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/ImageShowUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.widget.ImageView 4 | import com.bumptech.glide.Glide 5 | import com.bumptech.glide.load.engine.DiskCacheStrategy 6 | import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade 7 | import com.example.c001apk.MyApplication 8 | import com.example.c001apk.R 9 | import jp.wasabeef.glide.transformations.ColorFilterTransformation 10 | 11 | 12 | object ImageShowUtil { 13 | 14 | fun showUserCover(view: ImageView, url: String?) { 15 | 16 | Glide 17 | .with(view) 18 | .load(url) 19 | //.apply(bitmapTransform(BlurTransformation(25, 1))) 20 | .transform(ColorFilterTransformation(MyApplication.context.getColor(R.color.user_cover))) 21 | .diskCacheStrategy(DiskCacheStrategy.ALL) 22 | .transition(withCrossFade(100)) 23 | .skipMemoryCache(false) 24 | .dontAnimate() 25 | .into(view) 26 | } 27 | 28 | fun showIMG(view: ImageView, url: String?) { 29 | Glide 30 | .with(view) 31 | .load(url) 32 | .diskCacheStrategy(DiskCacheStrategy.ALL) 33 | .transition(withCrossFade(100)) 34 | .skipMemoryCache(false) 35 | .dontAnimate() 36 | .into(view) 37 | } 38 | 39 | fun showAvatar(view: ImageView, url: String?) { 40 | Glide 41 | .with(view) 42 | .load(url) 43 | .diskCacheStrategy(DiskCacheStrategy.ALL) 44 | .transition(withCrossFade(100)) 45 | .skipMemoryCache(false) 46 | .dontAnimate() 47 | .circleCrop() 48 | .into(view) 49 | } 50 | 51 | fun showIMG1(view: ImageView, url: String?) { 52 | Glide 53 | .with(view) 54 | .load(url) 55 | .diskCacheStrategy(DiskCacheStrategy.ALL) 56 | .transition(withCrossFade(100)) 57 | .skipMemoryCache(false) 58 | .dontAnimate() 59 | .centerCrop() 60 | .into(view) 61 | } 62 | 63 | 64 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/LinearItemDecoration.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.graphics.Rect 4 | import android.view.View 5 | import androidx.recyclerview.widget.RecyclerView 6 | 7 | class LinearItemDecoration(private val space: Int) : 8 | RecyclerView.ItemDecoration() { 9 | 10 | override fun getItemOffsets( 11 | outRect: Rect, 12 | view: View, 13 | parent: RecyclerView, 14 | state: RecyclerView.State 15 | ) { 16 | val position: Int = parent.getChildAdapterPosition(view) 17 | if (position == 0) 18 | outRect.top = space 19 | outRect.left = space 20 | outRect.right = space 21 | outRect.bottom = space 22 | } 23 | 24 | } 25 | 26 | class LinearItemDecoration1(private val space: Int) : 27 | RecyclerView.ItemDecoration() { 28 | 29 | override fun getItemOffsets( 30 | outRect: Rect, 31 | view: View, 32 | parent: RecyclerView, 33 | state: RecyclerView.State 34 | ) { 35 | val position: Int = parent.getChildAdapterPosition(view) 36 | if (position == 0) 37 | outRect.left = space 38 | outRect.top = space 39 | outRect.right = space 40 | outRect.bottom = space 41 | } 42 | 43 | } 44 | 45 | class ReplyItemDecoration(private val space: Int) : 46 | RecyclerView.ItemDecoration() { 47 | override fun getItemOffsets( 48 | outRect: Rect, 49 | view: View, 50 | parent: RecyclerView, 51 | state: RecyclerView.State 52 | ) { 53 | val position: Int = parent.getChildAdapterPosition(view) 54 | if (position != 0) 55 | outRect.top = space 56 | } 57 | 58 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/LoginUtils.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | 4 | import org.jsoup.nodes.Document 5 | 6 | class LoginUtils { 7 | companion object { 8 | fun Document.createRequestHash() = this.getElementsByTag("Body").attr("data-request-hash") 9 | 10 | fun createRandomNumber() = Math.random().toString().replace(".", "undefined") 11 | } 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/NestCollapsingToolbarLayout.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import com.google.android.material.appbar.CollapsingToolbarLayout 6 | 7 | class NestCollapsingToolbarLayout : CollapsingToolbarLayout { 8 | 9 | private var mIsScrimsShown: Boolean = false 10 | private lateinit var scrimsShowListener: OnScrimsShowListener 11 | 12 | constructor(context: Context) : super(context) 13 | 14 | constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) 15 | 16 | constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( 17 | context, 18 | attrs, 19 | defStyleAttr 20 | ) 21 | 22 | override fun setScrimsShown(shown: Boolean, animate: Boolean) { 23 | super.setScrimsShown(shown, animate) 24 | if (mIsScrimsShown != shown) { 25 | mIsScrimsShown = shown 26 | if (scrimsShowListener != null) { 27 | scrimsShowListener.onScrimsShowChange(this, mIsScrimsShown) 28 | } 29 | } 30 | } 31 | 32 | fun setOnScrimesShowListener(listener: OnScrimsShowListener){ 33 | scrimsShowListener = listener 34 | } 35 | 36 | interface OnScrimsShowListener { 37 | fun onScrimsShowChange( 38 | nestCollapsingToolbarLayout: NestCollapsingToolbarLayout, 39 | isScrimesShow: Boolean 40 | ) 41 | } 42 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/PubDateUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.annotation.SuppressLint 4 | import java.text.SimpleDateFormat 5 | 6 | 7 | object PubDateUtil { 8 | 9 | fun time(date: String): String? { 10 | val timestamp1 = date.toLong() 11 | val timestamp2 = System.currentTimeMillis() / 1000 12 | 13 | val pubtime: String? 14 | var diffMillis = timestamp2 - timestamp1 15 | 16 | return if (diffMillis < 60) { 17 | diffMillis.toString() + "秒前" 18 | } else if (diffMillis < 3600) { 19 | diffMillis /= 60 20 | diffMillis.toString() + "分钟前" 21 | } else if (diffMillis < 24 * 3600) { 22 | diffMillis /= 3600 23 | diffMillis.toString() + "小时前" 24 | } else { 25 | @SuppressLint("SimpleDateFormat") val format = SimpleDateFormat("M月dd日") 26 | pubtime = format.format(timestamp1 * 1000) 27 | pubtime 28 | } 29 | } 30 | 31 | fun fullTime(date: String): String? { 32 | val timestamp1 = date.toLong() 33 | val pubTime: String? 34 | @SuppressLint("SimpleDateFormat") val format = SimpleDateFormat("yyyy年M月dd日 HH:mm:ss") 35 | pubTime = format.format(timestamp1 * 1000) 36 | return pubTime 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/SpacesItemDecoration.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.graphics.Rect 4 | import android.view.View 5 | import androidx.recyclerview.widget.RecyclerView 6 | 7 | class SpacesItemDecoration( 8 | private val spanCount: Int, 9 | private val spaceValue: HashMap, 10 | private val includeEdge: Boolean 11 | ) : RecyclerView.ItemDecoration() { 12 | 13 | override fun getItemOffsets( 14 | outRect: Rect, 15 | view: View, 16 | parent: RecyclerView, 17 | state: RecyclerView.State 18 | ) { 19 | val position: Int = parent.getChildAdapterPosition(view) 20 | val column = position % spanCount 21 | if (includeEdge) { 22 | outRect.left = spaceValue[LEFT_SPACE]!! - column * spaceValue[LEFT_SPACE]!! / spanCount 23 | outRect.right = (column + 1) * spaceValue[RIGHT_SPACE]!! / spanCount 24 | if (position < spanCount) { 25 | outRect.top = spaceValue[TOP_SPACE]!! 26 | } 27 | outRect.bottom = spaceValue[BOTTOM_SPACE]!! 28 | } else { 29 | outRect.left = column * spaceValue[LEFT_SPACE]!! / spanCount 30 | outRect.right = 31 | spaceValue[RIGHT_SPACE]!! - (column + 1) * spaceValue[RIGHT_SPACE]!! / spanCount 32 | if (position >= spanCount) { 33 | outRect.top = spaceValue[TOP_SPACE]!! 34 | } 35 | } 36 | } 37 | 38 | companion object { 39 | const val TOP_SPACE = "top_space" 40 | const val BOTTOM_SPACE = "bottom_space" 41 | const val LEFT_SPACE = "left_space" 42 | const val RIGHT_SPACE = "right_space" 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/ThemeUtils.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | import android.content.Context 4 | import androidx.annotation.StyleRes 5 | import com.example.c001apk.R 6 | import com.google.android.material.color.DynamicColors 7 | import rikka.core.util.ResourceUtils 8 | 9 | object ThemeUtils { 10 | 11 | @StyleRes 12 | fun getNightThemeStyleRes(context: Context): Int { 13 | return if (PrefManager.blackDarkTheme && ResourceUtils.isNightMode(context.resources.configuration)) 14 | R.style.ThemeOverlay_Black else R.style.ThemeOverlay 15 | } 16 | 17 | val isSystemAccent 18 | get() = DynamicColors.isDynamicColorAvailable() && PrefManager.followSystemAccent 19 | 20 | private val colorThemeMap = mapOf( 21 | "MATERIAL_DEFAULT" to R.style.ThemeOverlay_MaterialDefault, 22 | "MATERIAL_SAKURA" to R.style.ThemeOverlay_MaterialSakura, 23 | "MATERIAL_RED" to R.style.ThemeOverlay_MaterialRed, 24 | "MATERIAL_PINK" to R.style.ThemeOverlay_MaterialPink, 25 | "MATERIAL_PURPLE" to R.style.ThemeOverlay_MaterialPurple, 26 | "MATERIAL_DEEP_PURPLE" to R.style.ThemeOverlay_MaterialDeepPurple, 27 | "MATERIAL_INDIGO" to R.style.ThemeOverlay_MaterialIndigo, 28 | "MATERIAL_BLUE" to R.style.ThemeOverlay_MaterialBlue, 29 | "MATERIAL_LIGHT_BLUE" to R.style.ThemeOverlay_MaterialLightBlue, 30 | "MATERIAL_CYAN" to R.style.ThemeOverlay_MaterialCyan, 31 | "MATERIAL_TEAL" to R.style.ThemeOverlay_MaterialTeal, 32 | "MATERIAL_GREEN" to R.style.ThemeOverlay_MaterialGreen, 33 | "MATERIAL_LIGHT_GREEN" to R.style.ThemeOverlay_MaterialLightGreen, 34 | "MATERIAL_LIME" to R.style.ThemeOverlay_MaterialLime, 35 | "MATERIAL_YELLOW" to R.style.ThemeOverlay_MaterialYellow, 36 | "MATERIAL_AMBER" to R.style.ThemeOverlay_MaterialAmber, 37 | "MATERIAL_ORANGE" to R.style.ThemeOverlay_MaterialOrange, 38 | "MATERIAL_DEEP_ORANGE" to R.style.ThemeOverlay_MaterialDeepOrange, 39 | "MATERIAL_BROWN" to R.style.ThemeOverlay_MaterialBrown, 40 | "MATERIAL_BLUE_GREY" to R.style.ThemeOverlay_MaterialBlueGrey 41 | ) 42 | 43 | val colorTheme get() = if (isSystemAccent) "SYSTEM" else PrefManager.themeColor 44 | val colorThemeStyleRes: Int 45 | @StyleRes get() = colorThemeMap[colorTheme] ?: R.style.ThemeOverlay_MaterialDefault 46 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/util/UrlUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.util 2 | 3 | object UrlUtil { 4 | 5 | fun http2https(url: String) = 6 | if (StringBuilder(url)[4] != 's') 7 | StringBuilder(url).insert(4, "s").toString() 8 | else url 9 | 10 | 11 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/vertical/adapter/SimpleTabAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.vertical.adapter; 2 | 3 | 4 | import com.example.c001apk.vertical.widget.TabView; 5 | 6 | /** 7 | * Created by chqiu on 2017/1/20. 8 | */ 9 | 10 | public abstract class SimpleTabAdapter implements TabAdapter { 11 | @Override 12 | public abstract int getCount(); 13 | 14 | @Override 15 | public TabView.TabBadge getBadge(int position) { 16 | return null; 17 | } 18 | 19 | @Override 20 | public TabView.TabIcon getIcon(int position) { 21 | return null; 22 | } 23 | 24 | @Override 25 | public TabView.TabTitle getTitle(int position) { 26 | return null; 27 | } 28 | 29 | @Override 30 | public int getBackground(int position) { 31 | return 0; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/vertical/adapter/TabAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.vertical.adapter; 2 | 3 | import com.example.c001apk.vertical.widget.TabView; 4 | 5 | /** 6 | * @author chqiu 7 | * Email:qstumn@163.com 8 | */ 9 | public interface TabAdapter { 10 | int getCount(); 11 | 12 | TabView.TabBadge getBadge(int position); 13 | 14 | TabView.TabIcon getIcon(int position); 15 | 16 | TabView.TabTitle getTitle(int position); 17 | 18 | int getBackground(int position); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/vertical/badgeview/Badge.java: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.vertical.badgeview; 2 | 3 | import android.graphics.PointF; 4 | import android.graphics.drawable.Drawable; 5 | import android.view.View; 6 | 7 | /** 8 | * @author chqiu 9 | * Email:qstumn@163.com 10 | */ 11 | 12 | public interface Badge { 13 | 14 | Badge setBadgeNumber(int badgeNum); 15 | 16 | int getBadgeNumber(); 17 | 18 | Badge setBadgeText(String badgeText); 19 | 20 | String getBadgeText(); 21 | 22 | Badge setExactMode(boolean isExact); 23 | 24 | boolean isExactMode(); 25 | 26 | Badge setShowShadow(boolean showShadow); 27 | 28 | boolean isShowShadow(); 29 | 30 | Badge setBadgeBackgroundColor(int color); 31 | 32 | Badge stroke(int color, float width, boolean isDpValue); 33 | 34 | int getBadgeBackgroundColor(); 35 | 36 | Badge setBadgeBackground(Drawable drawable); 37 | 38 | Badge setBadgeBackground(Drawable drawable, boolean clip); 39 | 40 | Drawable getBadgeBackground(); 41 | 42 | Badge setBadgeTextColor(int color); 43 | 44 | int getBadgeTextColor(); 45 | 46 | Badge setBadgeTextSize(float size, boolean isSpValue); 47 | 48 | float getBadgeTextSize(boolean isSpValue); 49 | 50 | Badge setBadgePadding(float padding, boolean isDpValue); 51 | 52 | float getBadgePadding(boolean isDpValue); 53 | 54 | boolean isDraggable(); 55 | 56 | Badge setBadgeGravity(int gravity); 57 | 58 | int getBadgeGravity(); 59 | 60 | Badge setGravityOffset(float offset, boolean isDpValue); 61 | 62 | Badge setGravityOffset(float offsetX, float offsetY, boolean isDpValue); 63 | 64 | float getGravityOffsetX(boolean isDpValue); 65 | 66 | float getGravityOffsetY(boolean isDpValue); 67 | 68 | Badge setOnDragStateChangedListener(OnDragStateChangedListener l); 69 | 70 | PointF getDragCenter(); 71 | 72 | Badge bindTarget(View view); 73 | 74 | View getTargetView(); 75 | 76 | void hide(boolean animate); 77 | 78 | interface OnDragStateChangedListener { 79 | int STATE_START = 1; 80 | int STATE_DRAGGING = 2; 81 | int STATE_DRAGGING_OUT_OF_RANGE = 3; 82 | int STATE_CANCELED = 4; 83 | int STATE_SUCCEED = 5; 84 | 85 | void onDragStateChanged(int dragState, Badge badge, View targetView); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/vertical/badgeview/DisplayUtil.java: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.vertical.badgeview; 2 | 3 | import android.content.Context; 4 | 5 | /** 6 | * @author chqiu 7 | * Email:qstumn@163.com 8 | */ 9 | 10 | public class DisplayUtil { 11 | public static int dp2px(Context context, float dp) { 12 | final float scale = context.getResources().getDisplayMetrics().density; 13 | return (int) (dp * scale + 0.5f); 14 | } 15 | 16 | public static int px2dp(Context context, float pxValue) { 17 | final float scale = context.getResources().getDisplayMetrics().density; 18 | return (int) (pxValue / scale + 0.5f); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/vertical/util/DisplayUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.vertical.util 2 | 3 | import android.content.Context 4 | 5 | /** 6 | * Created by chqiu on 2017/1/20. 7 | */ 8 | object DisplayUtil { 9 | @JvmStatic 10 | fun dp2px(context: Context, dp: Float): Int { 11 | val scale = context.resources.displayMetrics.density 12 | return (dp * scale + 0.5f).toInt() 13 | } 14 | 15 | fun px2dp(context: Context, pxValue: Float): Int { 16 | val scale = context.resources.displayMetrics.density 17 | return (pxValue / scale + 0.5f).toInt() 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/vertical/widget/TabBadgeView.java: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.vertical.widget; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.FrameLayout; 7 | 8 | import com.example.c001apk.vertical.badgeview.QBadgeView; 9 | 10 | 11 | /** 12 | * Created by chqiu on 2017/2/10. 13 | */ 14 | 15 | public class TabBadgeView extends QBadgeView { 16 | private TabBadgeView(Context context) { 17 | super(context); 18 | } 19 | 20 | public static TabBadgeView bindTab(TabView tab) { 21 | TabBadgeView badge = null; 22 | for (int i = 0; i < tab.getChildCount(); i++) { 23 | View child = tab.getChildAt(i); 24 | if (child != null && child instanceof TabBadgeView) { 25 | badge = (TabBadgeView) child; 26 | break; 27 | } 28 | } 29 | if (badge == null) { 30 | badge = new TabBadgeView(tab.getContext()); 31 | tab.addView(badge, new TabView.LayoutParams(TabView.LayoutParams.MATCH_PARENT, TabView.LayoutParams.MATCH_PARENT)); 32 | } 33 | badge.mTargetView = tab; 34 | return badge; 35 | } 36 | 37 | @Override 38 | protected void screenFromWindow(boolean screen) { 39 | if (getParent() != null) { 40 | ((ViewGroup) getParent()).removeView(this); 41 | } 42 | if (screen) { 43 | mActivityRoot.addView(this, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 44 | FrameLayout.LayoutParams.MATCH_PARENT)); 45 | } else { 46 | if (mTargetView instanceof TabView) { 47 | ((TabView) mTargetView).addView(this, 48 | new TabView.LayoutParams(TabView.LayoutParams.MATCH_PARENT, 49 | TabView.LayoutParams.MATCH_PARENT)); 50 | } else { 51 | bindTarget(mTargetView); 52 | } 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/vertical/widget/TabView.java: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.vertical.widget; 2 | 3 | import android.content.Context; 4 | import android.widget.Checkable; 5 | import android.widget.FrameLayout; 6 | import android.widget.ImageView; 7 | import android.widget.TextView; 8 | 9 | import com.example.c001apk.vertical.badgeview.Badge; 10 | 11 | /** 12 | * @author chqiu 13 | * Email:qstumn@163.com 14 | */ 15 | public abstract class TabView extends FrameLayout implements Checkable, ITabView { 16 | 17 | public TabView(Context context) { 18 | super(context); 19 | } 20 | 21 | @Override 22 | public TabView getTabView() { 23 | return this; 24 | } 25 | 26 | @Deprecated 27 | public abstract ImageView getIconView(); 28 | 29 | public abstract TextView getTitleView(); 30 | 31 | public abstract Badge getBadgeView(); 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/c001apk/view/CenteredImageSpan.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk.view 2 | 3 | import android.graphics.Canvas 4 | import android.graphics.Paint 5 | import android.graphics.drawable.Drawable 6 | import android.text.style.ImageSpan 7 | 8 | public class CenteredImageSpan(drawableRes: Drawable) : 9 | ImageSpan(drawableRes) { 10 | override fun draw( 11 | canvas: Canvas, text: CharSequence, 12 | start: Int, end: Int, x: Float, 13 | top: Int, y: Int, bottom: Int, paint: Paint 14 | ) { 15 | // image to draw 16 | val b = drawable 17 | // font metrics of text to be replaced 18 | val fm = paint.fontMetricsInt 19 | val transY = ((y + fm.descent + y + fm.ascent) / 2 20 | - b.bounds.bottom / 2) 21 | canvas.save() 22 | canvas.translate(x, transY.toFloat()) 23 | b.draw(canvas) 24 | canvas.restore() 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/color/home_card_background_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_coolb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_coolb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_fived.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_fived.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_fivef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_fivef.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_fivem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_fivem.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_fiveo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_fiveo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_fivey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_fivey.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_fy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_fy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_oned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_oned.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_onef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_onef.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_onem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_onem.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_oneo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_oneo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_oney.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_oney.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_oy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_oy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_teny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_teny.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_twod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_twod.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_twof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_twof.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_twom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_twom.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_twoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_twoo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_twoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_twoy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/c_ty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/c_ty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_100_qqdoge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_100_qqdoge.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1010.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1011.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1012.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1013.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1014.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1015.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1016.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1017.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1018.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1019.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_101_pyjiaoyi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_101_pyjiaoyi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1020.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1021.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1022_zhenbuchuo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1022_zhenbuchuo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1023_liewenhuke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1023_liewenhuke.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1024.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1025.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1026.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1027.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1028.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1029.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_102_fadai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_102_fadai.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1030.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1031.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_103_nb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_103_nb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_104.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_105.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_106.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_107.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_108.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_109.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_10_aoman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_10_aoman.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_11_yiwen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_11_yiwen.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_12_wuyu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_12_wuyu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_13_huaixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_13_huaixiao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_14_bishi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_14_bishi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_15_fanu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_15_fanu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_16_tuosai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_16_tuosai.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_17_tushe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_17_tushe.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_18_han.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_18_han.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_19_koubi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_19_koubi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_1_hahaha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_1_hahaha.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_20_qinqin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_20_qinqin.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_21_penxue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_21_penxue.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_22_xiaoyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_22_xiaoyan.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_23_shui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_23_shui.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_24_wuzuixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_24_wuzuixiao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_25_zaijian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_25_zaijian.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_26_kelian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_26_kelian.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_27_qiang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_27_qiang.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_28_ruo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_28_ruo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_29_baoquan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_29_baoquan.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_2_jingya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_2_jingya.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_30_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_30_ok.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_31_xiaoku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_31_xiaoku.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_32_heiha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_32_heiha.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_33_wulian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_33_wulian.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_34_jizhi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_34_jizhi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_35_ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_35_ye.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_36_ku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_36_ku.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_37_doge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_37_doge.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_38_wozuimei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_38_wozuimei.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_39_caidao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_39_caidao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_3_ciya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_3_ciya.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_40_aixin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_40_aixin.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_41_meigui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_41_meigui.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_42_diaoxie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_42_diaoxie.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_43_heixian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_43_heixian.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_44_pen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_44_pen.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_45_yinxian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_45_yinxian.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_46_nanguo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_46_nanguo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_47_weiqu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_47_weiqu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_48_weiweiyixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_48_weiweiyixiao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_49_huanhu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_49_huanhu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_4_liulei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_4_liulei.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_50_xinsui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_50_xinsui.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_51_chigua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_51_chigua.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_52_hejiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_52_hejiu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_53_pu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_53_pu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_54_hongyaowan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_54_hongyaowan.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_55_lvyaowan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_55_lvyaowan.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_56_dogexiaoku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_56_dogexiaoku.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_57_dogehechi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_57_dogehechi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_58_dogeyuanliangta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_58_dogeyuanliangta.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_59_erha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_59_erha.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_5_keai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_5_keai.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_60_kuan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_60_kuan.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_61_lvmao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_61_lvmao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_62_huaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_62_huaji.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_63_liuhanhuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_63_liuhanhuaji.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_64_shounuehuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_64_shounuehuaji.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_65_coshuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_65_coshuaji.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_66_doujiyanhuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_66_doujiyanhuaji.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_67_mojinghuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_67_mojinghuaji.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_68.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_69.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_6_weixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_6_weixiao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_70.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_71.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_72.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_73.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_74.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_75.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_76.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_77.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_78.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_79.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_7_hehe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_7_hehe.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_80.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_81_naikezui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_81_naikezui.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_82_miaomiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_82_miaomiao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_83_huoba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_83_huoba.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_84_baiyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_84_baiyan.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_85.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_86.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_87.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_88.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_89.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_8_piezui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_8_piezui.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_90.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_91.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_92.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_93.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_94.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_95_erhading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_95_erhading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_96_kuanlvmao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_96_kuanlvmao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_97_haixiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_97_haixiu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_98_wunai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_98_wunai.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_99_zhoumei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_99_zhoumei.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v1/coolapk_emotion_9_se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/drawable-v1/coolapk_emotion_9_se.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_at.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_clear_all.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_comment.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_date.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_forward.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_like.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_logout.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_message.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_message1.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notification_bell.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_photo.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_reply.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_setting.xml: -------------------------------------------------------------------------------- 1 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_thumb.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mini_scroll_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/outline_dark_mode_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/outline_format_color_fill_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/outline_invert_colors_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/outline_palette_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 16 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pic_count_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/reply2reply_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_background_trans.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/text_scroll_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_copy.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_feed.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_topic.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_web_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 19 | 20 | 24 | 25 | 26 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_reply_bottom_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | 16 | 23 | 24 | 28 | 29 | 38 | 39 | 40 | 41 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_reply_to_reply_bottom_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_blank.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_feed.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 19 | 20 | 24 | 25 | 26 | 27 | 32 | 33 | 38 | 39 | 40 | 41 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_follow.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 20 | 21 | 31 | 32 | 33 | 34 | 38 | 39 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home_app.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 18 | 19 | 20 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home_feed.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home_topic.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 22 | 23 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_search_feed.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_search_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_settings_preference.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_topic.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 20 | 21 | 26 | 27 | 31 | 32 | 40 | 41 | 42 | 43 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_topic_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_feed_content_pic.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_feed_content_reply_to_reply_item.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_feed_pic.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 18 | 19 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_icon_link_grid_card.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 13 | 14 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_icon_link_grid_card_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_icon_mini_scroll_card_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 20 | 21 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_image_carousel_card.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_image_carousel_card_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_image_text_scroll_card.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 13 | 14 | 20 | 21 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_image_text_scroll_card_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_message_mess.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 | 17 | 25 | 26 | 35 | 36 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/res/menu/home_feed_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/message_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/nav_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 12 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/webview_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/black 4 | #0DFFFFFF 5 | #FF84837F 6 | #FFBbBAB8 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FF000000 4 | #FFFFFFFF 5 | @color/white 6 | #0D000000 7 | #8A000000 8 | #FFBDBDBD 9 | #FF757575 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10dp 4 | 5dp 5 | 20dp 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes_overlay.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/xml/backup_rules.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/xml/data_extraction_rules.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 12 | 13 | 19 | -------------------------------------------------------------------------------- /app/src/test/java/com/example/coolapk/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.example.c001apk 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id("com.android.application") version "8.1.1" apply false 4 | id("org.jetbrains.kotlin.android") version "1.9.0" apply false 5 | id("dev.rikka.tools.materialthemebuilder") version "1.3.3" 6 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app's APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Kotlin code style for this project: "official" or "obsolete": 19 | kotlin.code.style=official 20 | # Enables namespacing of each library's R class so that its R class includes only the 21 | # resources declared in the library itself and none from the library's dependencies, 22 | # thereby reducing the size of the R class for that library 23 | android.nonTransitiveRClass=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jyotidwi/c001apk/86847e02ddf03d98ca55acb33767adfdb5c6035c/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Sep 30 09:26:01 CST 2023 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | jcenter() 14 | maven ("https://jitpack.io") 15 | } 16 | } 17 | 18 | rootProject.name = "c001apk" 19 | include(":app") 20 | --------------------------------------------------------------------------------