├── .gitignore ├── .idea ├── codeStyles │ └── codeStyleConfig.xml ├── gradle.xml ├── misc.xml └── runConfigurations.xml ├── MVP ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── jess │ │ └── arms │ │ ├── base │ │ ├── AdapterViewPager.java │ │ ├── App.java │ │ ├── BaseActivity.java │ │ ├── BaseApplication.java │ │ ├── BaseFragment.java │ │ ├── BaseHolder.java │ │ ├── BaseLazyLoadFragment.java │ │ ├── BaseService.java │ │ ├── DefaultAdapter.java │ │ ├── Platform.java │ │ └── delegate │ │ │ ├── ActivityDelegate.java │ │ │ ├── ActivityDelegateImpl.java │ │ │ ├── AppDelegate.java │ │ │ ├── AppLifecycles.java │ │ │ ├── FragmentDelegate.java │ │ │ ├── FragmentDelegateImpl.java │ │ │ ├── IActivity.java │ │ │ └── IFragment.java │ │ ├── di │ │ ├── component │ │ │ └── AppComponent.java │ │ ├── module │ │ │ ├── AppModule.java │ │ │ ├── ClientModule.java │ │ │ └── GlobalConfigModule.java │ │ └── scope │ │ │ ├── ActivityScope.java │ │ │ └── FragmentScope.java │ │ ├── http │ │ ├── BaseUrl.java │ │ ├── GlobalHttpHandler.java │ │ ├── OkHttpStreamFetcher.java │ │ ├── OkHttpUrlLoader.java │ │ ├── imageloader │ │ │ ├── BaseImageLoaderStrategy.java │ │ │ ├── ImageConfig.java │ │ │ ├── ImageLoader.java │ │ │ └── glide │ │ │ │ ├── GlideAppliesOptions.java │ │ │ │ └── GlideConfiguration.java │ │ └── log │ │ │ ├── DefaultFormatPrinter.java │ │ │ ├── FormatPrinter.java │ │ │ └── RequestInterceptor.java │ │ ├── integration │ │ ├── ActivityLifecycle.java │ │ ├── AppManager.java │ │ ├── ConfigModule.java │ │ ├── EventBusManager.java │ │ ├── FragmentLifecycle.java │ │ ├── IRepositoryManager.java │ │ ├── ManifestParser.java │ │ ├── RepositoryManager.java │ │ ├── cache │ │ │ ├── Cache.java │ │ │ ├── CacheType.java │ │ │ ├── IntelligentCache.java │ │ │ └── LruCache.java │ │ └── lifecycle │ │ │ ├── ActivityLifecycleForRxLifecycle.java │ │ │ ├── ActivityLifecycleable.java │ │ │ ├── FragmentLifecycleForRxLifecycle.java │ │ │ ├── FragmentLifecycleable.java │ │ │ └── Lifecycleable.java │ │ ├── mvp │ │ ├── BaseModel.java │ │ ├── BasePresenter.java │ │ ├── IModel.java │ │ ├── IPresenter.java │ │ └── IView.java │ │ ├── utils │ │ ├── ArmsUtils.java │ │ ├── CharacterHandler.java │ │ ├── DataHelper.java │ │ ├── DeviceUtils.java │ │ ├── DrawableProvider.java │ │ ├── FastBlur.java │ │ ├── LogUtils.java │ │ ├── PermissionUtil.java │ │ ├── Preconditions.java │ │ ├── RxLifecycleUtils.java │ │ ├── ThirdViewUtil.java │ │ ├── UrlEncoderUtils.java │ │ └── ZipHelper.java │ │ └── widget │ │ └── CustomPopupWindow.java │ └── res │ └── values │ └── strings.xml ├── README.md ├── build.gradle ├── config.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── screenShot ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png └── 8.png ├── settings.gradle └── storybooks ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src ├── androidTest └── java │ └── com │ └── winwang │ └── storybooks │ └── ExampleInstrumentedTest.java ├── main ├── AndroidManifest.xml ├── assets │ ├── fonts │ │ └── heilizhi.ttf │ └── storylist.json ├── java │ └── com │ │ └── winwang │ │ └── storybooks │ │ ├── AppConfig.java │ │ ├── MainActivity.java │ │ ├── adapter │ │ ├── HomeStoryAdapter.java │ │ ├── MusicHomeAdapter.java │ │ ├── MusicListAdapter.java │ │ ├── StoryCatAdapter.java │ │ ├── StoryListAdapter.java │ │ └── TalksAdapter.java │ │ ├── app │ │ ├── ActivityLifecycleCallbacksImpl.java │ │ ├── AppLifecyclesImpl.java │ │ ├── EventBusTags.java │ │ ├── FragmentLifecycleCallbacksImpl.java │ │ ├── GlobalConfiguration.java │ │ ├── GlobalHttpHandlerImpl.java │ │ ├── MyApp.java │ │ └── ResponseErrorListenerImpl.java │ │ ├── base │ │ └── BasesActivity.java │ │ ├── common │ │ ├── Constant.java │ │ └── RouterUrl.java │ │ ├── di │ │ ├── component │ │ │ ├── HomeComponent.java │ │ │ ├── MusicDetailComponent.java │ │ │ ├── MusicHomeComponent.java │ │ │ ├── MusicListComponent.java │ │ │ ├── MyRankComponent.java │ │ │ ├── MyTalkComponent.java │ │ │ ├── SplashComponent.java │ │ │ ├── StoryListComponent.java │ │ │ ├── TalkComponent.java │ │ │ ├── TalksComponent.java │ │ │ └── VideoDetailComponent.java │ │ └── module │ │ │ ├── HomeModule.java │ │ │ ├── MusicDetailModule.java │ │ │ ├── MusicHomeModule.java │ │ │ ├── MusicListModule.java │ │ │ ├── MyRankModule.java │ │ │ ├── MyTalkModule.java │ │ │ ├── SplashModule.java │ │ │ ├── StoryListModule.java │ │ │ ├── TalkModule.java │ │ │ ├── TalksModule.java │ │ │ └── VideoDetailModule.java │ │ ├── entity │ │ ├── AudioDetailBean.java │ │ ├── BaseBean.java │ │ ├── HomeListBean.java │ │ ├── HomeReqBean.java │ │ ├── MusicHomeBean.java │ │ ├── MusicListBean.java │ │ ├── StoryInListBean.java │ │ ├── StoryListBean.java │ │ ├── TalkBean.java │ │ ├── VideoBean.java │ │ └── VideoDetailBean.java │ │ ├── event │ │ └── MusicEvent.java │ │ ├── http │ │ ├── ApiService.java │ │ ├── CacheApi.java │ │ ├── RequestParams.java │ │ └── UrlConfig.java │ │ ├── interfaces │ │ └── PlayCompleteListener.java │ │ ├── loadingcallback │ │ ├── AnimateCallback.java │ │ ├── CustomCallback.java │ │ ├── EmptyCallback.java │ │ ├── ErrorCallback.java │ │ ├── LoadingCallback.java │ │ ├── LottieEmptyCallback.java │ │ ├── LottieLoadingCallback.java │ │ ├── PlaceholderCallback.java │ │ └── TimeoutCallback.java │ │ ├── mvp │ │ ├── contract │ │ │ ├── HomeContract.java │ │ │ ├── MusicDetailContract.java │ │ │ ├── MusicHomeContract.java │ │ │ ├── MusicListContract.java │ │ │ ├── MyRankContract.java │ │ │ ├── MyTalkContract.java │ │ │ ├── SplashContract.java │ │ │ ├── StoryListContract.java │ │ │ ├── TalkContract.java │ │ │ ├── TalksContract.java │ │ │ └── VideoDetailContract.java │ │ ├── model │ │ │ ├── HomeModel.java │ │ │ ├── MusicDetailModel.java │ │ │ ├── MusicHomeModel.java │ │ │ ├── MusicListModel.java │ │ │ ├── MyRankModel.java │ │ │ ├── MyTalkModel.java │ │ │ ├── SplashModel.java │ │ │ ├── StoryListModel.java │ │ │ ├── TalkModel.java │ │ │ ├── TalksModel.java │ │ │ └── VideoDetailModel.java │ │ └── presenter │ │ │ ├── HomePresenter.java │ │ │ ├── MusicDetailPresenter.java │ │ │ ├── MusicHomePresenter.java │ │ │ ├── MusicListPresenter.java │ │ │ ├── MyRankPresenter.java │ │ │ ├── MyTalkPresenter.java │ │ │ ├── SplashPresenter.java │ │ │ ├── StoryListPresenter.java │ │ │ ├── TalkPresenter.java │ │ │ ├── TalksPresenter.java │ │ │ └── VideoDetailPresenter.java │ │ ├── service │ │ └── PlayService.java │ │ ├── ui │ │ ├── activity │ │ │ ├── HomeActivity.java │ │ │ ├── MusicDetailActivity.java │ │ │ ├── MusicHomeActivity.java │ │ │ ├── MusicListActivity.java │ │ │ ├── SplashActivity.java │ │ │ ├── StoryListActivity.java │ │ │ ├── TalkActivity.java │ │ │ └── VideoDetailActivity.java │ │ └── fragment │ │ │ ├── MyRankFragment.java │ │ │ ├── MyTalkFragment.java │ │ │ └── TalksFragment.java │ │ ├── utils │ │ ├── AspectJ │ │ │ └── AspectClick.java │ │ ├── ExoMediaPlayer.java │ │ ├── FileUtils.java │ │ ├── NoDoubleClickUtils.java │ │ ├── RxUtils.java │ │ └── customAnnotation │ │ │ ├── DoubleClick.java │ │ │ ├── RequestPermissions.java │ │ │ └── SingleClick.java │ │ └── widget │ │ └── EmptyControlVideo.java └── res │ ├── anim │ ├── civ_rotate_animate.xml │ ├── translate_center_to_left.xml │ ├── translate_center_to_right.xml │ ├── translate_left_to_center.xml │ ├── translate_right_to_center.xml │ └── virbrate_animate.xml │ ├── drawable-xhdpi │ └── ic_arrow_back_white_24dp.png │ ├── drawable-xxhdpi │ └── ic_arrow_back_white_24dp.png │ ├── drawable-xxxhdpi │ ├── bird.png │ ├── btn_a2_n.png │ ├── btn_b2_n.png │ ├── btn_details_progress_flower.png │ ├── btn_girl_woyaojiang.png │ ├── dianshi.png │ ├── home_novoice.png │ ├── home_voice1.png │ ├── huyanmoshi_bg.png │ ├── ic_arrow_back_white_24dp.png │ ├── index_bg.png │ ├── index_down.png │ ├── index_hot.png │ ├── index_kuang.png │ ├── index_like.png │ ├── index_music.png │ ├── index_new.png │ ├── index_story.png │ ├── index_time.png │ ├── index_xiankan.png │ ├── list_bg.png │ ├── list_kuang.png │ ├── list_kuang_hot.png │ ├── list_kuang_new.png │ ├── list_qiangxian.png │ ├── list_story_icon_down.png │ ├── listen.png │ ├── pic_tingting_moren.png │ ├── play_bear.png │ ├── play_bg.png │ ├── play_like_nor.png │ ├── play_like_press.png │ ├── play_pinglun.png │ ├── play_play.png │ ├── play_return.png │ ├── play_suspend.png │ ├── play_voice.png │ ├── play_voice_close.png │ ├── radio.png │ ├── radio2.png │ ├── radio3.png │ ├── radio_cd_fengmian.png │ ├── radio_cd_shibai.png │ ├── star.png │ ├── yindao_bg.png │ └── yingdao.png │ ├── drawable │ ├── awkward.png │ ├── bird_qiehuan1.png │ ├── bird_qiehuan2.png │ ├── btn_home_girll1.png │ ├── btn_home_girll2.png │ ├── btn_home_girll3.png │ ├── btn_resources_ranking_def.png │ ├── btn_resources_ranking_sel.png │ ├── btn_resources_woyaolu_def.png │ ├── btn_resources_woyaolu_sel.png │ ├── custom.png │ ├── empty.png │ ├── error.png │ ├── fly_anim.xml │ ├── girl_anim.xml │ ├── home_tutu_1.png │ ├── home_tutu_10.png │ ├── home_tutu_2.png │ ├── home_tutu_3.png │ ├── home_tutu_4.png │ ├── home_tutu_5.png │ ├── home_tutu_6.png │ ├── home_tutu_7.png │ ├── home_tutu_8.png │ ├── home_tutu_9.png │ ├── home_tutu_erge_b1.png │ ├── home_tutu_erge_b2.png │ ├── home_tutu_gushi_b1.png │ ├── home_tutu_gushi_b2.png │ ├── img.jpg │ ├── jiazai_1.png │ ├── jiazai_2.png │ ├── jiazai_3.png │ ├── jiazai_4.png │ ├── jiazai_5.png │ ├── jiazai_6.png │ ├── list_button.9.png │ ├── listen_zhanweifu.9.png │ ├── loading.gif │ ├── music.png │ ├── music_anim.xml │ ├── rank_sel.xml │ ├── seek_progress_back.xml │ ├── seek_thumb.xml │ ├── story_anim.xml │ ├── talk_sel.xml │ ├── timeout.png │ └── white_back.xml │ ├── layout │ ├── activity_home.xml │ ├── activity_main.xml │ ├── activity_music_detail.xml │ ├── activity_music_home.xml │ ├── activity_music_list.xml │ ├── activity_splash.xml │ ├── activity_story_list.xml │ ├── activity_talk.xml │ ├── activity_video_detail.xml │ ├── empty_control_video.xml │ ├── fragment_my_rank.xml │ ├── fragment_my_talk.xml │ ├── fragment_talks.xml │ ├── include_title.xml │ ├── item_music_home_layout.xml │ ├── item_music_list_layout.xml │ ├── item_story_list_layout.xml │ ├── item_story_music_home_layout.xml │ ├── item_talk_rank_layout.xml │ ├── layout_animate.xml │ ├── layout_custom.xml │ ├── layout_custom_error.xml │ ├── layout_empty.xml │ ├── layout_error.xml │ ├── layout_head_top_bar.xml │ ├── layout_loading.xml │ ├── layout_lottie_empty.xml │ ├── layout_lottie_loading.xml │ ├── layout_placeholder.xml │ ├── layout_timeout.xml │ └── view_left_back.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── raw │ ├── beijing.mp3 │ ├── click.WAV │ ├── dianzan.mp3 │ ├── erge.mp3 │ ├── fanhui.wav │ ├── gushi.mp3 │ ├── home1.mp3 │ ├── home2.mp3 │ ├── home3.mp3 │ ├── hua_kuai.WAV │ └── hua_man.wav │ ├── values │ ├── colors.xml │ ├── dimens.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ └── network_security_config.xml └── test └── java └── com └── winwang └── storybooks └── ExampleUnitTest.java /.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 | /.idea/ 15 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /MVP/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /MVP/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_NAME=MVPArms 2 | -------------------------------------------------------------------------------- /MVP/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/base/App.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.base; 17 | 18 | import android.support.annotation.NonNull; 19 | 20 | import com.jess.arms.di.component.AppComponent; 21 | 22 | /** 23 | * ================================================ 24 | * 框架要求框架中的每个 {@link android.app.Application} 都需要实现此类, 以满足规范 25 | * 26 | * @see BaseApplication 27 | * @see 请配合官方 Wiki 文档学习本框架 28 | * @see 更新日志, 升级必看! 29 | * @see 常见 Issues, 踩坑必看! 30 | * @see MVPArms 官方组件化方案 ArmsComponent, 进阶指南! 31 | * Created by JessYan on 25/04/2017 14:54 32 | * Contact me 33 | * Follow me 34 | * ================================================ 35 | */ 36 | public interface App { 37 | @NonNull 38 | AppComponent getAppComponent(); 39 | } 40 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/base/Platform.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.base; 17 | 18 | /** 19 | * ================================================ 20 | * Created by JessYan on 2018/7/27 15:32 21 | * Contact me 22 | * Follow me 23 | * ================================================ 24 | */ 25 | public class Platform { 26 | public static final boolean DEPENDENCY_AUTO_LAYOUT; 27 | public static final boolean DEPENDENCY_SUPPORT_DESIGN; 28 | public static final boolean DEPENDENCY_GLIDE; 29 | public static final boolean DEPENDENCY_ANDROID_EVENTBUS; 30 | public static final boolean DEPENDENCY_EVENTBUS; 31 | 32 | static { 33 | DEPENDENCY_AUTO_LAYOUT = findClassByClassName("com.zhy.autolayout.AutoLayoutInfo"); 34 | DEPENDENCY_SUPPORT_DESIGN = findClassByClassName("android.support.design.widget.Snackbar"); 35 | DEPENDENCY_GLIDE = findClassByClassName("com.bumptech.glide.Glide"); 36 | DEPENDENCY_ANDROID_EVENTBUS = findClassByClassName("org.simple.eventbus.EventBus"); 37 | DEPENDENCY_EVENTBUS = findClassByClassName("org.greenrobot.eventbus.EventBus"); 38 | } 39 | 40 | private static boolean findClassByClassName(String className) { 41 | boolean hasDependency; 42 | try { 43 | Class.forName(className); 44 | hasDependency = true; 45 | } catch (ClassNotFoundException e) { 46 | hasDependency = false; 47 | } 48 | return hasDependency; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/base/delegate/ActivityDelegate.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.base.delegate; 17 | 18 | import android.app.Activity; 19 | import android.os.Bundle; 20 | import android.support.annotation.NonNull; 21 | import android.support.annotation.Nullable; 22 | 23 | /** 24 | * ================================================ 25 | * {@link Activity} 代理类,用于框架内部在每个 {@link Activity} 的对应生命周期中插入需要的逻辑 26 | * 27 | * @see ActivityDelegateImpl 28 | * @see ActivityDelegate wiki 官方文档 29 | * Created by JessYan on 26/04/2017 20:23 30 | * Contact me 31 | * Follow me 32 | * ================================================ 33 | */ 34 | public interface ActivityDelegate { 35 | String LAYOUT_LINEARLAYOUT = "LinearLayout"; 36 | String LAYOUT_FRAMELAYOUT = "FrameLayout"; 37 | String LAYOUT_RELATIVELAYOUT = "RelativeLayout"; 38 | String ACTIVITY_DELEGATE = "ACTIVITY_DELEGATE"; 39 | 40 | void onCreate(@Nullable Bundle savedInstanceState); 41 | 42 | void onStart(); 43 | 44 | void onResume(); 45 | 46 | void onPause(); 47 | 48 | void onStop(); 49 | 50 | void onSaveInstanceState(@NonNull Bundle outState); 51 | 52 | void onDestroy(); 53 | } 54 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/base/delegate/AppLifecycles.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.base.delegate; 17 | 18 | import android.app.Application; 19 | import android.content.Context; 20 | import android.support.annotation.NonNull; 21 | 22 | /** 23 | * ================================================ 24 | * 用于代理 {@link Application} 的生命周期 25 | * 26 | * @see AppDelegate 27 | * Created by JessYan on 18/07/2017 17:43 28 | * Contact me 29 | * Follow me 30 | * ================================================ 31 | */ 32 | public interface AppLifecycles { 33 | void attachBaseContext(@NonNull Context base); 34 | 35 | void onCreate(@NonNull Application application); 36 | 37 | void onTerminate(@NonNull Application application); 38 | } 39 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/di/scope/ActivityScope.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.di.scope; 17 | 18 | import java.lang.annotation.Documented; 19 | import java.lang.annotation.Retention; 20 | 21 | import javax.inject.Scope; 22 | 23 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 24 | 25 | /** 26 | * A scoping annotation to permit objects whose lifetime should 27 | * conform to the life of the activity to be memorized in the 28 | * correct component. 29 | */ 30 | @Scope 31 | @Documented 32 | @Retention(RUNTIME) 33 | public @interface ActivityScope {} 34 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/di/scope/FragmentScope.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.di.scope; 17 | 18 | import java.lang.annotation.Documented; 19 | import java.lang.annotation.Retention; 20 | 21 | import javax.inject.Scope; 22 | 23 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 24 | 25 | /** 26 | * A scoping annotation to permit objects whose lifetime should 27 | * conform to the life of the fragment to be memorized in the 28 | * correct component. 29 | */ 30 | @Scope 31 | @Documented 32 | @Retention(RUNTIME) 33 | public @interface FragmentScope {} 34 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/http/BaseUrl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.http; 17 | 18 | import android.support.annotation.NonNull; 19 | 20 | import okhttp3.HttpUrl; 21 | 22 | /** 23 | * ================================================ 24 | * 针对于 BaseUrl 在 App 启动时不能确定,需要请求服务器接口动态获取的应用场景 25 | *

26 | * Created by JessYan on 11/07/2017 14:58 27 | * Contact me 28 | * Follow me 29 | * ================================================ 30 | */ 31 | public interface BaseUrl { 32 | /** 33 | * 在调用 Retrofit API 接口之前,使用 Okhttp 或其他方式,请求到正确的 BaseUrl 并通过此方法返回 34 | * 35 | * @return 36 | */ 37 | @NonNull 38 | HttpUrl url(); 39 | } 40 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/http/imageloader/BaseImageLoaderStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.http.imageloader; 17 | 18 | import android.content.Context; 19 | import android.support.annotation.Nullable; 20 | 21 | /** 22 | * ================================================ 23 | * 图片加载策略,实现 {@link BaseImageLoaderStrategy} 24 | * 并通过 {@link ImageLoader#setLoadImgStrategy(BaseImageLoaderStrategy)} 配置后,才可进行图片请求 25 | *

26 | * Created by JessYan on 8/5/2016 15:50 27 | * Contact me 28 | * Follow me 29 | * ================================================ 30 | */ 31 | public interface BaseImageLoaderStrategy { 32 | 33 | /** 34 | * 加载图片 35 | * 36 | * @param ctx {@link Context} 37 | * @param config 图片加载配置信息 38 | */ 39 | void loadImage(@Nullable Context ctx, @Nullable T config); 40 | 41 | /** 42 | * 停止加载 43 | * 44 | * @param ctx {@link Context} 45 | * @param config 图片加载配置信息 46 | */ 47 | void clear(@Nullable Context ctx, @Nullable T config); 48 | } 49 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/http/imageloader/ImageConfig.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.http.imageloader; 17 | 18 | import android.widget.ImageView; 19 | 20 | /** 21 | * ================================================ 22 | * 这里是图片加载配置信息的基类,定义一些所有图片加载框架都可以用的通用参数 23 | * 每个 {@link BaseImageLoaderStrategy} 应该对应一个 {@link ImageConfig} 实现类 24 | *

25 | * Created by JessYan on 8/5/16 15:19 26 | * Contact me 27 | * Follow me 28 | * ================================================ 29 | */ 30 | public class ImageConfig { 31 | protected String url; 32 | protected ImageView imageView; 33 | protected int placeholder;//占位符 34 | protected int errorPic;//错误占位符 35 | 36 | public String getUrl() { 37 | return url; 38 | } 39 | 40 | public ImageView getImageView() { 41 | return imageView; 42 | } 43 | 44 | public int getPlaceholder() { 45 | return placeholder; 46 | } 47 | 48 | public int getErrorPic() { 49 | return errorPic; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/http/imageloader/glide/GlideAppliesOptions.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.http.imageloader.glide; 17 | 18 | import android.content.Context; 19 | import android.support.annotation.NonNull; 20 | 21 | import com.bumptech.glide.Glide; 22 | import com.bumptech.glide.GlideBuilder; 23 | import com.jess.arms.http.imageloader.BaseImageLoaderStrategy; 24 | 25 | /** 26 | * ================================================ 27 | * 如果你想具有配置 @{@link Glide} 的权利,则需要让 {@link BaseImageLoaderStrategy} 28 | * 的实现类也必须实现 {@link GlideAppliesOptions} 29 | *

30 | * Created by JessYan on 13/08/2017 22:02 31 | * Contact me 32 | * Follow me 33 | * ================================================ 34 | */ 35 | public interface GlideAppliesOptions { 36 | 37 | /** 38 | * 配置 @{@link Glide} 的自定义参数,此方法在 @{@link Glide} 初始化时执行(@{@link Glide} 在第一次被调用时初始化),只会执行一次 39 | * 40 | * @param context 41 | * @param builder {@link GlideBuilder} 此类被用来创建 Glide 42 | */ 43 | void applyGlideOptions(@NonNull Context context, @NonNull GlideBuilder builder); 44 | } 45 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/integration/IRepositoryManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.integration; 17 | 18 | import android.content.Context; 19 | import android.support.annotation.NonNull; 20 | 21 | import com.jess.arms.mvp.IModel; 22 | 23 | /** 24 | * ================================================ 25 | * 用来管理网络请求层,以及数据缓存层,以后可能添加数据库请求层 26 | * 提供给 {@link IModel} 必要的 Api 做数据处理 27 | * 28 | * @see RepositoryManager wiki 官方文档 29 | * Created by JessYan on 17/03/2017 11:15 30 | * Contact me 31 | * Follow me 32 | * ================================================ 33 | */ 34 | public interface IRepositoryManager { 35 | 36 | /** 37 | * 根据传入的 Class 获取对应的 Retrofit service 38 | * 39 | * @param service Retrofit service class 40 | * @param Retrofit service 类型 41 | * @return Retrofit service 42 | */ 43 | @NonNull 44 | T obtainRetrofitService(@NonNull Class service); 45 | 46 | 47 | /** 48 | * 根据传入的 Class 获取对应的 RxCache service 49 | * 50 | * @param cache RxCache service class 51 | * @param RxCache service 类型 52 | * @return RxCache service 53 | */ 54 | @NonNull 55 | T obtainCacheService(@NonNull Class cache); 56 | 57 | /** 58 | * 清理所有缓存 59 | */ 60 | void clearAllCache(); 61 | 62 | /** 63 | * 获取 {@link Context} 64 | * 65 | * @return {@link Context} 66 | */ 67 | @NonNull 68 | Context getContext(); 69 | } 70 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/integration/lifecycle/ActivityLifecycleable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.integration.lifecycle; 17 | 18 | import android.app.Activity; 19 | 20 | import com.trello.rxlifecycle2.RxLifecycle; 21 | import com.trello.rxlifecycle2.android.ActivityEvent; 22 | 23 | /** 24 | * ================================================ 25 | * 让 {@link Activity} 实现此接口,即可正常使用 {@link RxLifecycle} 26 | * 27 | * Created by JessYan on 26/08/2017 17:14 28 | * Contact me 29 | * Follow me 30 | * ================================================ 31 | */ 32 | public interface ActivityLifecycleable extends Lifecycleable { 33 | } 34 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/integration/lifecycle/FragmentLifecycleable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.integration.lifecycle; 17 | 18 | import android.support.v4.app.Fragment; 19 | 20 | import com.trello.rxlifecycle2.RxLifecycle; 21 | import com.trello.rxlifecycle2.android.FragmentEvent; 22 | 23 | /** 24 | * ================================================ 25 | * 让 {@link Fragment} 实现此接口,即可正常使用 {@link RxLifecycle} 26 | * 27 | * Created by JessYan on 26/08/2017 17:14 28 | * Contact me 29 | * Follow me 30 | * ================================================ 31 | */ 32 | public interface FragmentLifecycleable extends Lifecycleable { 33 | } 34 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/integration/lifecycle/Lifecycleable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.integration.lifecycle; 17 | 18 | import android.app.Activity; 19 | import android.support.annotation.NonNull; 20 | import android.support.v4.app.Fragment; 21 | 22 | import com.jess.arms.utils.RxLifecycleUtils; 23 | import com.trello.rxlifecycle2.RxLifecycle; 24 | 25 | import io.reactivex.subjects.Subject; 26 | 27 | /** 28 | * ================================================ 29 | * 让 {@link Activity}/{@link Fragment} 实现此接口,即可正常使用 {@link RxLifecycle} 30 | * 无需再继承 {@link RxLifecycle} 提供的 Activity/Fragment ,扩展性极强 31 | * 32 | * @see RxLifecycleUtils 详细用法请查看此类 33 | * Created by JessYan on 25/08/2017 18:39 34 | * Contact me 35 | * Follow me 36 | * ================================================ 37 | */ 38 | public interface Lifecycleable { 39 | @NonNull 40 | Subject provideLifecycleSubject(); 41 | } 42 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/mvp/BaseModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.mvp; 17 | 18 | import android.arch.lifecycle.Lifecycle; 19 | import android.arch.lifecycle.LifecycleObserver; 20 | import android.arch.lifecycle.LifecycleOwner; 21 | import android.arch.lifecycle.OnLifecycleEvent; 22 | 23 | import com.jess.arms.integration.IRepositoryManager; 24 | 25 | /** 26 | * ================================================ 27 | * 基类 Model 28 | * 29 | * @see Model wiki 官方文档 30 | * Created by JessYan on 08/05/2016 12:55 31 | * Contact me 32 | * Follow me 33 | * ================================================ 34 | */ 35 | public class BaseModel implements IModel, LifecycleObserver { 36 | protected IRepositoryManager mRepositoryManager;//用于管理网络请求层, 以及数据缓存层 37 | 38 | public BaseModel(IRepositoryManager repositoryManager) { 39 | this.mRepositoryManager = repositoryManager; 40 | } 41 | 42 | /** 43 | * 在框架中 {@link BasePresenter#onDestroy()} 时会默认调用 {@link IModel#onDestroy()} 44 | */ 45 | @Override 46 | public void onDestroy() { 47 | mRepositoryManager = null; 48 | } 49 | 50 | @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) 51 | void onDestroy(LifecycleOwner owner) { 52 | owner.getLifecycle().removeObserver(this); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/mvp/IModel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.mvp; 17 | 18 | /** 19 | * ================================================ 20 | * 框架要求框架中的每个 Model 都需要实现此类,以满足规范 21 | * 22 | * @see BaseModel 23 | * @see Model wiki 官方文档 24 | * Created by JessYan on 15/12/2016 10:45 25 | * Contact me 26 | * Follow me 27 | * ================================================ 28 | */ 29 | public interface IModel { 30 | 31 | /** 32 | * 在框架中 {@link BasePresenter#onDestroy()} 时会默认调用 {@link IModel#onDestroy()} 33 | */ 34 | void onDestroy(); 35 | } 36 | -------------------------------------------------------------------------------- /MVP/src/main/java/com/jess/arms/mvp/IPresenter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 JessYan 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.jess.arms.mvp; 17 | 18 | import android.app.Activity; 19 | 20 | /** 21 | * ================================================ 22 | * 框架要求框架中的每个 Presenter 都需要实现此类,以满足规范 23 | * 24 | * @see BasePresenter 25 | * @see Presenter wiki 官方文档 26 | * Created by JessYan on 4/28/2016 27 | * Contact me 28 | * Follow me 29 | * ================================================ 30 | */ 31 | public interface IPresenter { 32 | 33 | /** 34 | * 做一些初始化操作 35 | */ 36 | void onStart(); 37 | 38 | /** 39 | * 在框架中 {@link Activity#onDestroy()} 时会默认调用 {@link IPresenter#onDestroy()} 40 | */ 41 | void onDestroy(); 42 | } 43 | -------------------------------------------------------------------------------- /MVP/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | arms 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # StoryBook 2 | 儿童故事阅读(仿写阿布儿童故事App--Api通过Fiddler抓包获取,该app仅用作学习用途,侵权删除) 3 | 该App基础架构基于JessYan开源MVPArms开发(MVP+RXjava+RxCache+Retrofit+Dagger2),做了部分修改,项目中通过AOP方式实现连续点击过滤,防止多次跳转界面,配合Rxpermission+AOP实现了通过注解动态申请权限,非常便捷 4 | 开发该app的主要目的是尝试Dagger2在项目中开发的使用,同时在开发的时候,也尝试了通过创建模板实现快速开发的目的,该项目集成了视频播放和音频播放 5 | 6 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/1.png?raw=true) 7 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/2.png?raw=true) 8 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/3.png?raw=true) 9 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/4.png?raw=true) 10 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/5.png?raw=true) 11 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/6.png?raw=true) 12 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/7.png?raw=true) 13 | ![图片](https://github.com/WinWang/StoryBook/blob/master/screenShot/8.png?raw=true) 14 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | apply from: "config.gradle" 3 | buildscript { 4 | repositories { 5 | google() 6 | // jcenter() 7 | maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' } 8 | maven{ url'http://maven.aliyun.com/nexus/content/repositories/jcenter'} 9 | mavenCentral() 10 | 11 | } 12 | dependencies { 13 | classpath 'com.android.tools.build:gradle:3.3.2' 14 | classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' 15 | //Gradle Bintray Plugin 16 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0' 17 | //AspectJ 18 | classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4' 19 | // NOTE: Do not place your application dependencies here; they belong 20 | // in the individual module build.gradle files 21 | } 22 | } 23 | 24 | allprojects { 25 | repositories { 26 | google() 27 | // jcenter() 28 | maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' } 29 | maven{ url'http://maven.aliyun.com/nexus/content/repositories/jcenter'} 30 | maven { url "https://jitpack.io" } 31 | mavenCentral() 32 | 33 | } 34 | } 35 | 36 | task clean(type: Delete) { 37 | delete rootProject.buildDir 38 | } 39 | 40 | 41 | -------------------------------------------------------------------------------- /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=-Xmx1536m 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 | 15 | 16 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Jun 04 11:10:29 CST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip 7 | -------------------------------------------------------------------------------- /screenShot/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/1.png -------------------------------------------------------------------------------- /screenShot/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/2.png -------------------------------------------------------------------------------- /screenShot/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/3.png -------------------------------------------------------------------------------- /screenShot/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/4.png -------------------------------------------------------------------------------- /screenShot/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/5.png -------------------------------------------------------------------------------- /screenShot/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/6.png -------------------------------------------------------------------------------- /screenShot/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/7.png -------------------------------------------------------------------------------- /screenShot/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/screenShot/8.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':storybooks', ':MVP' 2 | -------------------------------------------------------------------------------- /storybooks/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /storybooks/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /storybooks/src/androidTest/java/com/winwang/storybooks/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks; 2 | 3 | /** 4 | * Instrumented test, which will execute on an Android device. 5 | * 6 | * @see Testing documentation 7 | */ 8 | public class ExampleInstrumentedTest { 9 | 10 | public void useAppContext() { 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /storybooks/src/main/assets/fonts/heilizhi.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/assets/fonts/heilizhi.ttf -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/AppConfig.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/14 5 | * Description-> 6 | */ 7 | public class AppConfig { 8 | public static final boolean Debug = true; 9 | 10 | public static final String MD5_KEY = "0102030405060708"; //请求的MD5加密串 11 | } 12 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | 6 | /** 7 | * Skeleton of an Android Things activity. 8 | *

9 | * Android Things peripheral APIs are accessible through the class 10 | * PeripheralManagerService. For example, the snippet below will open a GPIO pin and 11 | * set it to HIGH: 12 | * 13 | *

{@code
14 |  * PeripheralManagerService service = new PeripheralManagerService();
15 |  * mLedGpio = service.openGpio("BCM6");
16 |  * mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
17 |  * mLedGpio.setValue(true);
18 |  * }
19 | *

20 | * For more complex peripherals, look for an existing user-space driver, or implement one if none 21 | * is available. 22 | * 23 | * @see https://github.com/androidthings/contrib-drivers#readme 24 | */ 25 | public class MainActivity extends Activity { 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.activity_main); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/adapter/HomeStoryAdapter.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.adapter; 2 | 3 | import android.support.annotation.Nullable; 4 | import android.widget.ImageView; 5 | 6 | import com.bumptech.glide.Glide; 7 | import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 8 | import com.bumptech.glide.request.RequestOptions; 9 | import com.chad.library.adapter.base.BaseQuickAdapter; 10 | import com.chad.library.adapter.base.BaseViewHolder; 11 | import com.jess.arms.utils.ArmsUtils; 12 | import com.winwang.storybooks.R; 13 | import com.winwang.storybooks.entity.StoryListBean; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * Created by WinWang on 2019/6/6 19 | * Description-> 20 | */ 21 | public class HomeStoryAdapter extends BaseQuickAdapter { 22 | 23 | 24 | private final RequestOptions mRequestOptions; 25 | 26 | public HomeStoryAdapter(int layoutResId, @Nullable List data) { 27 | super(layoutResId, data); 28 | mRequestOptions = new RequestOptions(); 29 | mRequestOptions.placeholder(R.drawable.listen_zhanweifu); 30 | mRequestOptions.error(R.drawable.listen_zhanweifu); 31 | } 32 | 33 | @Override 34 | protected void convert(BaseViewHolder helper, StoryListBean.S1005Bean.Classlist1Bean item) { 35 | ImageView cover = (ImageView) helper.getView(R.id.iv_home_cover); 36 | helper.setText(R.id.tv_home_title, item.getName()); 37 | Glide.with(mContext).load(item.getPrintscreen()).apply(mRequestOptions).apply(RequestOptions.bitmapTransform(new RoundedCorners(ArmsUtils.dip2px(mContext, 32)))).into(cover); 38 | // ImageConfigImpl.builder().url(item.getVideoImage()).imageRadius(20).imageView(cover).build(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/adapter/MusicHomeAdapter.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.adapter; 2 | 3 | import android.content.res.AssetManager; 4 | import android.graphics.Typeface; 5 | import android.support.annotation.Nullable; 6 | import android.widget.ImageView; 7 | import android.widget.TextView; 8 | 9 | import com.bumptech.glide.Glide; 10 | import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 11 | import com.bumptech.glide.request.RequestOptions; 12 | import com.chad.library.adapter.base.BaseQuickAdapter; 13 | import com.chad.library.adapter.base.BaseViewHolder; 14 | import com.winwang.storybooks.R; 15 | import com.winwang.storybooks.entity.MusicHomeBean; 16 | 17 | import java.util.List; 18 | 19 | /** 20 | * Created by WinWang on 2019/6/28 21 | * Description-> 22 | */ 23 | public class MusicHomeAdapter extends BaseQuickAdapter { 24 | 25 | public MusicHomeAdapter(int layoutResId, @Nullable List data) { 26 | super(layoutResId, data); 27 | } 28 | 29 | @Override 30 | protected void convert(BaseViewHolder helper, MusicHomeBean.ListBean item) { 31 | ImageView cover = (ImageView) helper.getView(R.id.iv_music_home_box); 32 | Glide.with(mContext).load(item.getTitleimage()).apply(RequestOptions.bitmapTransform(new RoundedCorners(40))).into(cover); 33 | helper.setText(R.id.tv_music_home_title, item.getName()); 34 | AssetManager mgr = mContext.getAssets(); 35 | Typeface tf = Typeface.createFromAsset(mgr, "fonts/heilizhi.ttf"); 36 | TextView title = (TextView) helper.getView(R.id.tv_music_home_title); 37 | title.setTypeface(tf); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/adapter/MusicListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.adapter; 2 | 3 | import android.content.res.AssetManager; 4 | import android.graphics.Typeface; 5 | import android.support.annotation.Nullable; 6 | import android.widget.ImageView; 7 | import android.widget.TextView; 8 | 9 | import com.bumptech.glide.Glide; 10 | import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 11 | import com.bumptech.glide.request.RequestOptions; 12 | import com.chad.library.adapter.base.BaseQuickAdapter; 13 | import com.chad.library.adapter.base.BaseViewHolder; 14 | import com.winwang.storybooks.R; 15 | import com.winwang.storybooks.entity.MusicListBean; 16 | 17 | import java.util.List; 18 | 19 | /** 20 | * Created by WinWang on 2019/6/28 21 | * Description-> 22 | */ 23 | public class MusicListAdapter extends BaseQuickAdapter { 24 | 25 | public MusicListAdapter(int layoutResId, @Nullable List data) { 26 | super(layoutResId, data); 27 | } 28 | 29 | @Override 30 | protected void convert(BaseViewHolder helper, MusicListBean.ClasslistBean item) { 31 | ImageView cover = (ImageView) helper.getView(R.id.iv_music_home_box); 32 | Glide.with(mContext).load(R.drawable.pic_tingting_moren).apply(RequestOptions.bitmapTransform(new RoundedCorners(40))).into(cover); 33 | helper.setText(R.id.tv_music_home_title, item.getName()); 34 | AssetManager mgr = mContext.getAssets(); 35 | Typeface tf = Typeface.createFromAsset(mgr, "fonts/heilizhi.ttf"); 36 | TextView title = (TextView) helper.getView(R.id.tv_music_home_title); 37 | title.setTypeface(tf); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/adapter/StoryCatAdapter.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.adapter; 2 | 3 | import android.support.annotation.Nullable; 4 | 5 | import com.chad.library.adapter.base.BaseQuickAdapter; 6 | import com.chad.library.adapter.base.BaseViewHolder; 7 | import com.winwang.storybooks.entity.StoryInListBean; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * Created by WinWang on 2019/7/3 13 | * Description-> 14 | */ 15 | public class StoryCatAdapter extends BaseQuickAdapter { 16 | 17 | public StoryCatAdapter(int layoutResId, @Nullable List data) { 18 | super(layoutResId, data); 19 | 20 | } 21 | 22 | @Override 23 | protected void convert(BaseViewHolder helper, StoryInListBean.CategoryListBean item) { 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/adapter/StoryListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.adapter; 2 | 3 | import android.content.res.AssetManager; 4 | import android.graphics.Typeface; 5 | import android.support.annotation.Nullable; 6 | import android.widget.ImageView; 7 | import android.widget.TextView; 8 | 9 | import com.bumptech.glide.Glide; 10 | import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 11 | import com.bumptech.glide.request.RequestOptions; 12 | import com.chad.library.adapter.base.BaseQuickAdapter; 13 | import com.chad.library.adapter.base.BaseViewHolder; 14 | import com.winwang.storybooks.R; 15 | import com.winwang.storybooks.entity.StoryInListBean; 16 | 17 | import java.util.List; 18 | 19 | /** 20 | * Created by WinWang on 2019/7/1 21 | * Description-> 22 | */ 23 | public class StoryListAdapter extends BaseQuickAdapter { 24 | 25 | public StoryListAdapter(int layoutResId, @Nullable List data) { 26 | super(layoutResId, data); 27 | } 28 | 29 | @Override 30 | protected void convert(BaseViewHolder helper, StoryInListBean.ClasslistBean item) { 31 | ImageView cover = (ImageView) helper.getView(R.id.iv_music_home_box); 32 | Glide.with(mContext).load(item.getLllustration()).apply(RequestOptions.bitmapTransform(new RoundedCorners(40))).into(cover); 33 | helper.setText(R.id.tv_music_home_title, item.getName()); 34 | AssetManager mgr = mContext.getAssets(); 35 | Typeface tf = Typeface.createFromAsset(mgr, "fonts/heilizhi.ttf"); 36 | TextView title = (TextView) helper.getView(R.id.tv_music_home_title); 37 | title.setTypeface(tf); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/adapter/TalksAdapter.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.adapter; 2 | 3 | import android.support.annotation.Nullable; 4 | import android.widget.ImageView; 5 | 6 | import com.bumptech.glide.Glide; 7 | import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 8 | import com.bumptech.glide.request.RequestOptions; 9 | import com.chad.library.adapter.base.BaseQuickAdapter; 10 | import com.chad.library.adapter.base.BaseViewHolder; 11 | import com.winwang.storybooks.R; 12 | import com.winwang.storybooks.entity.TalkBean; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * Created by WinWang on 2019/7/3 18 | * Description-> 19 | */ 20 | public class TalksAdapter extends BaseQuickAdapter { 21 | 22 | public TalksAdapter(int layoutResId, @Nullable List data) { 23 | super(layoutResId, data); 24 | } 25 | 26 | @Override 27 | protected void convert(BaseViewHolder helper, TalkBean.ListBean item) { 28 | String name = item.getName(); 29 | helper.setText(R.id.tv_talk_title,name); 30 | ImageView cover = (ImageView) helper.getView(R.id.iv_talk_cover); 31 | Glide.with(mContext).load(item.getImage()).apply(RequestOptions.bitmapTransform(new RoundedCorners(40))).into(cover); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/app/EventBusTags.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.app; 2 | 3 | /** 4 | * ================================================ 5 | * 放置 AndroidEventBus 的 Tag, 便于检索 6 | * Arms 核心库现在并不会依赖某个 EventBus, 要想使用 EventBus, 还请在项目中自行依赖对应的 EventBus 7 | * 现在支持两种 EventBus, greenrobot 的 EventBus 和畅销书 《Android源码设计模式解析与实战》的作者 何红辉 所作的 AndroidEventBus 8 | * 9 | * @see EventBusTags wiki 官方文档 10 | * Created by MVPArmsTemplate on 06/04/2019 13:45 11 | * Contact me 12 | * Follow me 13 | * ================================================ 14 | */ 15 | public interface EventBusTags { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/common/Constant.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.common; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/18 5 | * Description-> 6 | */ 7 | public class Constant { 8 | } 9 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/common/RouterUrl.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.common; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/18 5 | * Description-> 6 | */ 7 | public class RouterUrl { 8 | public static final String HOME_URL = "/app/homeAc"; //首页 9 | public static final String VIDEO_DETAIL_URL = "/app/videoDetail"; //视频详情页 10 | public static final String AUDIO_DETAIL_URL = "/app/audioDetail"; //音频详情页 11 | public static final String MUSIC_HOME = "/app/musicHomeAc";//音乐首页 12 | public static final String MUSIC_LIST = "/app/musicListAc";//音乐列表 13 | public static final String STORY_LIST = "/app/storyListAc";//故事列表列表 14 | public static final String TALK_LIST = "/app/talk_list";//演讲页面 15 | } 16 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/HomeComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.HomeModule; 9 | import com.winwang.storybooks.mvp.contract.HomeContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.HomeActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 06/04/2019 18:35 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = HomeModule.class, dependencies = AppComponent.class) 29 | public interface HomeComponent { 30 | void inject(HomeActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | HomeComponent.Builder view(HomeContract.View view); 36 | 37 | HomeComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | HomeComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/MusicDetailComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.MusicDetailModule; 9 | import com.winwang.storybooks.mvp.contract.MusicDetailContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.MusicDetailActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 06/28/2019 17:22 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = MusicDetailModule.class, dependencies = AppComponent.class) 29 | public interface MusicDetailComponent { 30 | void inject(MusicDetailActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | MusicDetailComponent.Builder view(MusicDetailContract.View view); 36 | 37 | MusicDetailComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | MusicDetailComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/MusicHomeComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.MusicHomeModule; 9 | import com.winwang.storybooks.mvp.contract.MusicHomeContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.MusicHomeActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 06/27/2019 16:27 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = MusicHomeModule.class, dependencies = AppComponent.class) 29 | public interface MusicHomeComponent { 30 | void inject(MusicHomeActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | MusicHomeComponent.Builder view(MusicHomeContract.View view); 36 | 37 | MusicHomeComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | MusicHomeComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/MusicListComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.MusicListModule; 9 | import com.winwang.storybooks.mvp.contract.MusicListContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.MusicListActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 06/27/2019 17:02 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = MusicListModule.class, dependencies = AppComponent.class) 29 | public interface MusicListComponent { 30 | void inject(MusicListActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | MusicListComponent.Builder view(MusicListContract.View view); 36 | 37 | MusicListComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | MusicListComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/MyRankComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.MyRankModule; 9 | import com.winwang.storybooks.mvp.contract.MyRankContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | import com.winwang.storybooks.ui.fragment.MyRankFragment; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 07/03/2019 14:32 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @FragmentScope 28 | @Component(modules = MyRankModule.class, dependencies = AppComponent.class) 29 | public interface MyRankComponent { 30 | void inject(MyRankFragment fragment); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | MyRankComponent.Builder view(MyRankContract.View view); 36 | 37 | MyRankComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | MyRankComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/MyTalkComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.MyTalkModule; 9 | import com.winwang.storybooks.mvp.contract.MyTalkContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | import com.winwang.storybooks.ui.fragment.MyTalkFragment; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 07/03/2019 14:31 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @FragmentScope 28 | @Component(modules = MyTalkModule.class, dependencies = AppComponent.class) 29 | public interface MyTalkComponent { 30 | void inject(MyTalkFragment fragment); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | MyTalkComponent.Builder view(MyTalkContract.View view); 36 | 37 | MyTalkComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | MyTalkComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/SplashComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.SplashModule; 9 | import com.winwang.storybooks.mvp.contract.SplashContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.SplashActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 06/04/2019 18:39 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = SplashModule.class, dependencies = AppComponent.class) 29 | public interface SplashComponent { 30 | void inject(SplashActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | SplashComponent.Builder view(SplashContract.View view); 36 | 37 | SplashComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | SplashComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/StoryListComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.StoryListModule; 9 | import com.winwang.storybooks.mvp.contract.StoryListContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.StoryListActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 07/01/2019 18:21 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = StoryListModule.class, dependencies = AppComponent.class) 29 | public interface StoryListComponent { 30 | void inject(StoryListActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | StoryListComponent.Builder view(StoryListContract.View view); 36 | 37 | StoryListComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | StoryListComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/TalkComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.TalkModule; 9 | import com.winwang.storybooks.mvp.contract.TalkContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.TalkActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 07/02/2019 19:52 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = TalkModule.class, dependencies = AppComponent.class) 29 | public interface TalkComponent { 30 | void inject(TalkActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | TalkComponent.Builder view(TalkContract.View view); 36 | 37 | TalkComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | TalkComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/TalksComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.TalksModule; 9 | import com.winwang.storybooks.mvp.contract.TalksContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | import com.winwang.storybooks.ui.fragment.TalksFragment; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 07/03/2019 16:50 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @FragmentScope 28 | @Component(modules = TalksModule.class, dependencies = AppComponent.class) 29 | public interface TalksComponent { 30 | void inject(TalksFragment fragment); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | TalksComponent.Builder view(TalksContract.View view); 36 | 37 | TalksComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | TalksComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/component/VideoDetailComponent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import com.winwang.storybooks.di.module.VideoDetailModule; 9 | import com.winwang.storybooks.mvp.contract.VideoDetailContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | import com.winwang.storybooks.ui.activity.VideoDetailActivity; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 06/13/2019 19:33 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = VideoDetailModule.class, dependencies = AppComponent.class) 29 | public interface VideoDetailComponent { 30 | void inject(VideoDetailActivity activity); 31 | 32 | @Component.Builder 33 | interface Builder { 34 | @BindsInstance 35 | VideoDetailComponent.Builder view(VideoDetailContract.View view); 36 | 37 | VideoDetailComponent.Builder appComponent(AppComponent appComponent); 38 | 39 | VideoDetailComponent build(); 40 | } 41 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/HomeModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v7.widget.RecyclerView; 5 | 6 | import com.chad.library.adapter.base.BaseQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | import com.jess.arms.di.scope.ActivityScope; 9 | 10 | import dagger.Binds; 11 | import dagger.Module; 12 | import dagger.Provides; 13 | 14 | import com.leochuan.CircleLayoutManager; 15 | import com.leochuan.CircleScaleLayoutManager; 16 | import com.winwang.storybooks.R; 17 | import com.winwang.storybooks.adapter.HomeStoryAdapter; 18 | import com.winwang.storybooks.entity.StoryListBean; 19 | import com.winwang.storybooks.mvp.contract.HomeContract; 20 | import com.winwang.storybooks.mvp.model.HomeModel; 21 | 22 | import java.util.ArrayList; 23 | import java.util.List; 24 | 25 | import javax.inject.Named; 26 | 27 | 28 | /** 29 | * ================================================ 30 | * Description: 31 | *

32 | * Created by MVPArmsTemplate on 06/04/2019 18:35 33 | * Contact me 34 | * Follow me 35 | * Star me 36 | * See me 37 | * 模版请保持更新 38 | * ================================================ 39 | */ 40 | @Module 41 | public abstract class HomeModule { 42 | 43 | @Binds 44 | abstract HomeContract.Model bindHomeModel(HomeModel model); 45 | 46 | @ActivityScope 47 | @Provides 48 | static CircleScaleLayoutManager provideLayoutManager(HomeContract.View view) { 49 | return new CircleScaleLayoutManager(view.getActivity()); 50 | } 51 | 52 | @ActivityScope 53 | @Provides 54 | static List storyList() { 55 | return new ArrayList<>(); 56 | } 57 | 58 | 59 | @ActivityScope 60 | @Provides 61 | static HomeStoryAdapter provideStoryAdapter(List storyList) { 62 | return new HomeStoryAdapter(R.layout.item_story_music_home_layout, storyList); 63 | } 64 | 65 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/MusicDetailModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import com.jess.arms.di.scope.ActivityScope; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | import com.winwang.storybooks.mvp.contract.MusicDetailContract; 10 | import com.winwang.storybooks.mvp.model.MusicDetailModel; 11 | 12 | 13 | /** 14 | * ================================================ 15 | * Description: 16 | *

17 | * Created by MVPArmsTemplate on 06/28/2019 17:22 18 | * Contact me 19 | * Follow me 20 | * Star me 21 | * See me 22 | * 模版请保持更新 23 | * ================================================ 24 | */ 25 | @Module 26 | public abstract class MusicDetailModule { 27 | 28 | @Binds 29 | abstract MusicDetailContract.Model bindMusicDetailModel(MusicDetailModel model); 30 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/MusicHomeModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import android.support.v7.widget.LinearLayoutManager; 4 | 5 | import com.jess.arms.di.scope.ActivityScope; 6 | 7 | import dagger.Binds; 8 | import dagger.Module; 9 | import dagger.Provides; 10 | 11 | import com.winwang.storybooks.R; 12 | import com.winwang.storybooks.adapter.MusicHomeAdapter; 13 | import com.winwang.storybooks.entity.MusicHomeBean; 14 | import com.winwang.storybooks.mvp.contract.MusicHomeContract; 15 | import com.winwang.storybooks.mvp.model.MusicHomeModel; 16 | 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 06/27/2019 16:27 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @Module 34 | public abstract class MusicHomeModule { 35 | 36 | @Binds 37 | abstract MusicHomeContract.Model bindMusicHomeModel(MusicHomeModel model); 38 | 39 | 40 | @ActivityScope 41 | @Provides 42 | static LinearLayoutManager provideLayoutManager(MusicHomeContract.View mView) { 43 | return new LinearLayoutManager(mView.getActivity(),LinearLayoutManager.HORIZONTAL,false); 44 | } 45 | 46 | 47 | @ActivityScope 48 | @Provides 49 | static List provideList() { 50 | return new ArrayList<>(); 51 | } 52 | 53 | @ActivityScope 54 | @Provides 55 | static MusicHomeAdapter provideAdatper(List dataList) { 56 | return new MusicHomeAdapter(R.layout.item_music_home_layout, dataList); 57 | } 58 | 59 | 60 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/MusicListModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import android.support.v7.widget.LinearLayoutManager; 4 | 5 | import com.jess.arms.di.scope.ActivityScope; 6 | 7 | import dagger.Binds; 8 | import dagger.Module; 9 | import dagger.Provides; 10 | 11 | import com.winwang.storybooks.R; 12 | import com.winwang.storybooks.adapter.MusicListAdapter; 13 | import com.winwang.storybooks.entity.MusicListBean; 14 | import com.winwang.storybooks.mvp.contract.MusicListContract; 15 | import com.winwang.storybooks.mvp.model.MusicListModel; 16 | 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 06/27/2019 17:02 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @Module 34 | public abstract class MusicListModule { 35 | 36 | @Binds 37 | abstract MusicListContract.Model bindMusicListModel(MusicListModel model); 38 | 39 | @ActivityScope 40 | @Provides 41 | static LinearLayoutManager provideLayoutManager(MusicListContract.View mView) { 42 | return new LinearLayoutManager(mView.getActivity(), LinearLayoutManager.HORIZONTAL, false); 43 | } 44 | 45 | 46 | @ActivityScope 47 | @Provides 48 | static List provideDataList() { 49 | return new ArrayList<>(); 50 | } 51 | 52 | 53 | @ActivityScope 54 | @Provides 55 | static MusicListAdapter provideAdapter(List dataList) { 56 | return new MusicListAdapter(R.layout.item_music_list_layout, dataList); 57 | } 58 | 59 | 60 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/MyRankModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import com.jess.arms.di.scope.FragmentScope; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | import com.winwang.storybooks.mvp.contract.MyRankContract; 10 | import com.winwang.storybooks.mvp.model.MyRankModel; 11 | 12 | 13 | /** 14 | * ================================================ 15 | * Description: 16 | *

17 | * Created by MVPArmsTemplate on 07/03/2019 14:32 18 | * Contact me 19 | * Follow me 20 | * Star me 21 | * See me 22 | * 模版请保持更新 23 | * ================================================ 24 | */ 25 | @Module 26 | public abstract class MyRankModule { 27 | 28 | @Binds 29 | abstract MyRankContract.Model bindMyRankModel(MyRankModel model); 30 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/MyTalkModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import android.support.v4.app.Fragment; 4 | 5 | import com.jess.arms.base.AdapterViewPager; 6 | import com.jess.arms.di.scope.FragmentScope; 7 | 8 | import dagger.Binds; 9 | import dagger.Module; 10 | import dagger.Provides; 11 | 12 | import com.winwang.storybooks.mvp.contract.MyTalkContract; 13 | import com.winwang.storybooks.mvp.model.MyTalkModel; 14 | import com.winwang.storybooks.ui.fragment.TalksFragment; 15 | 16 | import java.util.ArrayList; 17 | 18 | 19 | /** 20 | * ================================================ 21 | * Description: 22 | *

23 | * Created by MVPArmsTemplate on 07/03/2019 14:31 24 | * Contact me 25 | * Follow me 26 | * Star me 27 | * See me 28 | * 模版请保持更新 29 | * ================================================ 30 | */ 31 | @Module 32 | public abstract class MyTalkModule { 33 | 34 | static String[] titles = {"故事", "儿歌", "唐诗", "国学"}; 35 | 36 | @Binds 37 | abstract MyTalkContract.Model bindMyTalkModel(MyTalkModel model); 38 | 39 | 40 | @FragmentScope 41 | @Provides 42 | static AdapterViewPager provideVpAdapter(MyTalkContract.View view) { 43 | ArrayList fragments = new ArrayList<>(); 44 | for (String title : titles) { 45 | fragments.add(TalksFragment.newInstance()); 46 | } 47 | return new AdapterViewPager(view.getFragment().getChildFragmentManager(), fragments, titles); 48 | } 49 | 50 | 51 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/SplashModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import com.jess.arms.di.scope.ActivityScope; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | import com.winwang.storybooks.mvp.contract.SplashContract; 10 | import com.winwang.storybooks.mvp.model.SplashModel; 11 | 12 | 13 | /** 14 | * ================================================ 15 | * Description: 16 | *

17 | * Created by MVPArmsTemplate on 06/04/2019 18:39 18 | * Contact me 19 | * Follow me 20 | * Star me 21 | * See me 22 | * 模版请保持更新 23 | * ================================================ 24 | */ 25 | @Module 26 | public abstract class SplashModule { 27 | 28 | @Binds 29 | abstract SplashContract.Model bindSplashModel(SplashModel model); 30 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/TalkModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import android.support.v4.app.Fragment; 4 | 5 | import com.jess.arms.base.AdapterViewPager; 6 | import com.jess.arms.di.scope.ActivityScope; 7 | 8 | import dagger.Binds; 9 | import dagger.Module; 10 | import dagger.Provides; 11 | 12 | import com.winwang.storybooks.mvp.contract.TalkContract; 13 | import com.winwang.storybooks.mvp.model.TalkModel; 14 | import com.winwang.storybooks.ui.fragment.MyRankFragment; 15 | import com.winwang.storybooks.ui.fragment.MyTalkFragment; 16 | 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 07/02/2019 19:52 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @Module 34 | public abstract class TalkModule { 35 | 36 | @Binds 37 | abstract TalkContract.Model bindTalkModel(TalkModel model); 38 | 39 | 40 | @ActivityScope 41 | @Provides 42 | static List provideFragmentList() { 43 | return new ArrayList<>(); 44 | } 45 | 46 | 47 | @ActivityScope 48 | @Provides 49 | static AdapterViewPager provideVpAdapter(TalkContract.View view, List fragmentList) { 50 | return new AdapterViewPager(view.getActivity().getSupportFragmentManager(), fragmentList); 51 | } 52 | 53 | 54 | @ActivityScope 55 | @Provides 56 | static MyTalkFragment provideTalkFragment() { 57 | return MyTalkFragment.newInstance(); 58 | } 59 | 60 | 61 | @ActivityScope 62 | @Provides 63 | 64 | static MyRankFragment provideRankFragment() { 65 | return MyRankFragment.newInstance(); 66 | } 67 | 68 | 69 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/TalksModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import android.support.v7.widget.GridLayoutManager; 4 | 5 | import com.jess.arms.di.scope.FragmentScope; 6 | 7 | import dagger.Binds; 8 | import dagger.Module; 9 | import dagger.Provides; 10 | 11 | import com.winwang.storybooks.R; 12 | import com.winwang.storybooks.adapter.TalksAdapter; 13 | import com.winwang.storybooks.entity.TalkBean; 14 | import com.winwang.storybooks.mvp.contract.TalksContract; 15 | import com.winwang.storybooks.mvp.model.TalksModel; 16 | 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 07/03/2019 16:50 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @Module 34 | public abstract class TalksModule { 35 | 36 | @Binds 37 | abstract TalksContract.Model bindTalksModel(TalksModel model); 38 | 39 | 40 | @FragmentScope 41 | @Provides 42 | static List provideDataList() { 43 | return new ArrayList<>(); 44 | } 45 | 46 | @FragmentScope 47 | @Provides 48 | static TalksAdapter provideAdapter(List dataList) { 49 | return new TalksAdapter(R.layout.item_talk_rank_layout, dataList); 50 | } 51 | 52 | @FragmentScope 53 | @Provides 54 | static GridLayoutManager provideManager(TalksContract.View view) { 55 | return new GridLayoutManager(view.getContexts(), 3); 56 | } 57 | 58 | 59 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/di/module/VideoDetailModule.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.di.module; 2 | 3 | import com.jess.arms.di.scope.ActivityScope; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | import com.winwang.storybooks.mvp.contract.VideoDetailContract; 10 | import com.winwang.storybooks.mvp.model.VideoDetailModel; 11 | 12 | 13 | /** 14 | * ================================================ 15 | * Description: 16 | *

17 | * Created by MVPArmsTemplate on 06/13/2019 19:33 18 | * Contact me 19 | * Follow me 20 | * Star me 21 | * See me 22 | * 模版请保持更新 23 | * ================================================ 24 | */ 25 | @Module 26 | public abstract class VideoDetailModule { 27 | 28 | @Binds 29 | abstract VideoDetailContract.Model bindVideoDetailModel(VideoDetailModel model); 30 | 31 | 32 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/entity/BaseBean.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.entity; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/16 5 | * Description-> 6 | */ 7 | public class BaseBean { 8 | public String resultcode; 9 | public String message; 10 | 11 | public String getResultcode() { 12 | return resultcode; 13 | } 14 | 15 | public void setResultcode(String resultcode) { 16 | this.resultcode = resultcode; 17 | } 18 | 19 | public String getMessage() { 20 | return message; 21 | } 22 | 23 | public void setMessage(String message) { 24 | this.message = message; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/entity/VideoBean.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.entity; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/14 5 | * Description-> 6 | */ 7 | public class VideoBean { 8 | /** 9 | * abs_speed : 2770 10 | * e : 0 11 | * h : 0 12 | * l : http://baiducdnct.inter.iqiyi.com/videos/v0/20190518/0f/50/5f6a08da41a8b7318fc27212302310fa.f4v?key=07801d22ca44cbb814bce9ea557288cb8&dis_k=e492c1fcffe3c2b6bedcc68936868cc5&dis_t=1560509052&dis_dz=CT-ShangHai&dis_st=103&src=iqiyi.com&uuid=b49d01eb-5d037a7c-af&qd_ip=2f5feb97&qd_uid=0&qd_vipdyn=0&qd_k=b21bfcbdfa9de3e040f2b0ad1abc14be&qd_aid=229185901&qd_stert=0&qd_tvid=1314426800&qd_p=2f5feb97&qd_tm=1560508916511&qd_index=1&qd_src=2_22_222&qyid=94ea74350f3edc3ddc7c4c4576e60e3f&qd_vip=0&qd_vipres=0 13 | * mrc : 3 14 | * t : CT|ShangHai-180.157.1.235 15 | * z : baiducdn_ct 16 | */ 17 | 18 | private int abs_speed; 19 | private String e; 20 | private String h; 21 | private String l; 22 | private String mrc; 23 | private String t; 24 | private String z; 25 | 26 | public int getAbs_speed() { 27 | return abs_speed; 28 | } 29 | 30 | public void setAbs_speed(int abs_speed) { 31 | this.abs_speed = abs_speed; 32 | } 33 | 34 | public String getE() { 35 | return e; 36 | } 37 | 38 | public void setE(String e) { 39 | this.e = e; 40 | } 41 | 42 | public String getH() { 43 | return h; 44 | } 45 | 46 | public void setH(String h) { 47 | this.h = h; 48 | } 49 | 50 | public String getL() { 51 | return l; 52 | } 53 | 54 | public void setL(String l) { 55 | this.l = l; 56 | } 57 | 58 | public String getMrc() { 59 | return mrc; 60 | } 61 | 62 | public void setMrc(String mrc) { 63 | this.mrc = mrc; 64 | } 65 | 66 | public String getT() { 67 | return t; 68 | } 69 | 70 | public void setT(String t) { 71 | this.t = t; 72 | } 73 | 74 | public String getZ() { 75 | return z; 76 | } 77 | 78 | public void setZ(String z) { 79 | this.z = z; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/event/MusicEvent.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.event; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/18 5 | * Description-> 6 | */ 7 | public class MusicEvent { 8 | public String eventName; 9 | 10 | public MusicEvent(String eventName) { 11 | this.eventName = eventName; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/http/CacheApi.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.http; 2 | 3 | 4 | import com.winwang.storybooks.entity.StoryListBean; 5 | import com.winwang.storybooks.entity.VideoBean; 6 | import com.winwang.storybooks.entity.VideoDetailBean; 7 | 8 | import java.util.concurrent.TimeUnit; 9 | 10 | import io.reactivex.Observable; 11 | import io.rx_cache2.DynamicKey; 12 | import io.rx_cache2.EvictDynamicKey; 13 | import io.rx_cache2.LifeCache; 14 | 15 | /** 16 | * Created by WinWang on 2019/6/14 17 | * Description-> 18 | */ 19 | public interface CacheApi { 20 | /** 21 | * 首页获取故事列表 22 | * 23 | * @param story 24 | * @param key 25 | * @param key 26 | * @return 27 | */ 28 | @LifeCache(duration = 7, timeUnit = TimeUnit.DAYS) 29 | Observable getStoryList(Observable story, DynamicKey key, EvictDynamicKey keyE); 30 | 31 | 32 | /** 33 | * 获取视频详情 34 | * 35 | * @param story 36 | * @param key 37 | * @param key 38 | * @return 39 | */ 40 | @LifeCache(duration = 7, timeUnit = TimeUnit.DAYS) 41 | Observable getVideoDetail(Observable story, DynamicKey key, EvictDynamicKey keyE); 42 | 43 | 44 | /** 45 | * 获取视频播放链接 46 | * 47 | * @param story 48 | * @param key 49 | * @param key 50 | * @return 51 | */ 52 | @LifeCache(duration = 7, timeUnit = TimeUnit.DAYS) 53 | Observable getVideoDetailUrl(Observable story, DynamicKey key, EvictDynamicKey keyE); 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/http/RequestParams.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.http; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | import com.blankj.utilcode.util.EncryptUtils; 5 | import com.winwang.storybooks.AppConfig; 6 | 7 | import java.util.LinkedHashMap; 8 | 9 | /** 10 | * Created by WinWang on 2019/6/14 11 | * Description->请求公共参数封装 12 | */ 13 | public class RequestParams { 14 | 15 | private String version = "1.2.3.0"; 16 | private String merchantid = "10000"; 17 | private String clienttype = "3"; 18 | private String clientversion = "1.2.3.0"; 19 | private String IMEI = "864329033907351"; 20 | private String UserID = "225903"; 21 | private String advsource = "Oppo"; 22 | 23 | 24 | /** 25 | * 经测试废弃,md5加密对顺序有要求 26 | * 27 | * @param hashMap 28 | * @return 29 | */ 30 | @Deprecated 31 | public String getParams(LinkedHashMap hashMap) { 32 | StringBuilder builder = new StringBuilder(); 33 | JSONObject jsonObject = new JSONObject(); 34 | for (String s : hashMap.keySet()) { 35 | String value = hashMap.get(s); 36 | jsonObject.put(s, value); 37 | builder.append(value); 38 | } 39 | jsonObject.put("version", version); 40 | builder.append(version); 41 | jsonObject.put("merchantid", merchantid); 42 | builder.append(merchantid); 43 | jsonObject.put("clienttype", clienttype); 44 | builder.append(clienttype); 45 | jsonObject.put("clientversion", clientversion); 46 | builder.append(clientversion); 47 | jsonObject.put("IMEI", IMEI); 48 | builder.append(IMEI); 49 | jsonObject.put("UserID", UserID); 50 | builder.append(UserID); 51 | jsonObject.put("advsource", advsource); 52 | builder.append(advsource); 53 | String md5 = EncryptUtils.encryptMD5ToString(builder.toString() + AppConfig.MD5_KEY); 54 | jsonObject.put("md", md5); 55 | return jsonObject.toJSONString(); 56 | } 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/http/UrlConfig.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.http; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/5 5 | * Description-> 6 | */ 7 | public class UrlConfig { 8 | public static final String BASEURL = "http://tutugushiapi.tutuerge.com"; 9 | } 10 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/interfaces/PlayCompleteListener.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.interfaces; 2 | 3 | /** 4 | * Created by WinWang on 2019/6/17 5 | * Description-> 6 | */ 7 | public interface PlayCompleteListener { 8 | void onComplete(); 9 | 10 | void onPlayerPause(); 11 | 12 | void onPlayerPlay(); 13 | 14 | default void onUIClick() { 15 | 16 | } 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/AnimateCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.view.animation.Animation; 6 | import android.view.animation.LinearInterpolator; 7 | import android.view.animation.RotateAnimation; 8 | import android.widget.Toast; 9 | 10 | import com.kingja.loadsir.callback.Callback; 11 | import com.winwang.storybooks.R; 12 | 13 | 14 | 15 | public class AnimateCallback extends Callback { 16 | 17 | private Context context; 18 | private View animateView; 19 | 20 | @Override 21 | protected int onCreateView() { 22 | return R.layout.layout_animate; 23 | } 24 | 25 | @Override 26 | protected void onViewCreate(Context context, View view) { 27 | super.onViewCreate(context, view); 28 | } 29 | 30 | @Override 31 | public void onAttach(Context context, View view) { 32 | this.context = context; 33 | animateView = view.findViewById(R.id.view_animate); 34 | Animation animation = new RotateAnimation(0, 359, Animation.RELATIVE_TO_SELF, 35 | 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 36 | animation.setDuration(1000); 37 | animation.setRepeatCount(Integer.MAX_VALUE); 38 | animation.setFillAfter(true); 39 | animation.setInterpolator(new LinearInterpolator()); 40 | animateView.startAnimation(animation); 41 | Toast.makeText(context.getApplicationContext(), "start animation", Toast.LENGTH_SHORT).show(); 42 | } 43 | 44 | @Override 45 | public void onDetach() { 46 | super.onDetach(); 47 | if (animateView != null) { 48 | animateView.clearAnimation(); 49 | } 50 | Toast.makeText(context.getApplicationContext(), "stop animation", Toast.LENGTH_SHORT).show(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/CustomCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.widget.Toast; 6 | 7 | import com.kingja.loadsir.callback.Callback; 8 | import com.winwang.storybooks.R; 9 | 10 | 11 | public class CustomCallback extends Callback { 12 | 13 | @Override 14 | protected int onCreateView() { 15 | return R.layout.layout_custom; 16 | } 17 | 18 | @Override 19 | protected boolean onReloadEvent(final Context context, View view) { 20 | Toast.makeText(context.getApplicationContext(), "Hello buddy, how r u! :p", Toast.LENGTH_SHORT).show(); 21 | (view.findViewById(R.id.iv_gift)).setOnClickListener(new View.OnClickListener() { 22 | @Override 23 | public void onClick(View v) { 24 | Toast.makeText(context.getApplicationContext(), "It's your gift! :p", Toast.LENGTH_SHORT).show(); 25 | } 26 | }); 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/EmptyCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import com.kingja.loadsir.callback.Callback; 4 | import com.winwang.storybooks.R; 5 | 6 | 7 | 8 | public class EmptyCallback extends Callback { 9 | 10 | @Override 11 | protected int onCreateView() { 12 | return R.layout.layout_empty; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/ErrorCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | 4 | import com.kingja.loadsir.callback.Callback; 5 | import com.winwang.storybooks.R; 6 | 7 | 8 | public class ErrorCallback extends Callback { 9 | @Override 10 | protected int onCreateView() { 11 | return R.layout.layout_error; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/LoadingCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.kingja.loadsir.callback.Callback; 7 | import com.winwang.storybooks.R; 8 | 9 | 10 | 11 | 12 | public class LoadingCallback extends Callback { 13 | 14 | @Override 15 | protected int onCreateView() { 16 | return R.layout.layout_loading; 17 | } 18 | 19 | @Override 20 | public boolean getSuccessVisible() { 21 | return super.getSuccessVisible(); 22 | } 23 | 24 | @Override 25 | protected boolean onReloadEvent(Context context, View view) { 26 | return true; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/LottieEmptyCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import com.kingja.loadsir.callback.Callback; 4 | import com.winwang.storybooks.R; 5 | 6 | 7 | public class LottieEmptyCallback extends Callback { 8 | 9 | @Override 10 | protected int onCreateView() { 11 | return R.layout.layout_lottie_empty; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/LottieLoadingCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.kingja.loadsir.callback.Callback; 7 | import com.winwang.storybooks.R; 8 | 9 | 10 | 11 | public class LottieLoadingCallback extends Callback { 12 | 13 | @Override 14 | protected int onCreateView() { 15 | return R.layout.layout_lottie_loading; 16 | } 17 | 18 | @Override 19 | protected boolean onReloadEvent(Context context, View view) { 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/PlaceholderCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.kingja.loadsir.callback.Callback; 7 | import com.winwang.storybooks.R; 8 | 9 | 10 | public class PlaceholderCallback extends Callback { 11 | 12 | @Override 13 | protected int onCreateView() { 14 | return R.layout.layout_placeholder; 15 | } 16 | 17 | @Override 18 | protected boolean onReloadEvent(Context context, View view) { 19 | return true; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/loadingcallback/TimeoutCallback.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.loadingcallback; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.widget.Toast; 6 | 7 | import com.kingja.loadsir.callback.Callback; 8 | import com.winwang.storybooks.R; 9 | 10 | public class TimeoutCallback extends Callback { 11 | 12 | @Override 13 | protected int onCreateView() { 14 | return R.layout.layout_timeout; 15 | } 16 | 17 | @Override 18 | protected boolean onReloadEvent(Context context, View view) { 19 | Toast.makeText(context.getApplicationContext(), "Connecting to the network again!", Toast.LENGTH_SHORT).show(); 20 | return false; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/HomeContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | 4 | import android.app.Activity; 5 | 6 | import com.jess.arms.mvp.IModel; 7 | import com.jess.arms.mvp.IView; 8 | import com.winwang.storybooks.entity.StoryListBean; 9 | 10 | import io.reactivex.Observable; 11 | import okhttp3.RequestBody; 12 | 13 | 14 | /** 15 | * ================================================ 16 | * Description: 17 | *

18 | * Created by MVPArmsTemplate on 06/04/2019 18:35 19 | * Contact me 20 | * Follow me 21 | * Star me 22 | * See me 23 | * 模版请保持更新 24 | * ================================================ 25 | */ 26 | public interface HomeContract { 27 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 28 | interface View extends IView { 29 | Activity getActivity(); 30 | } 31 | 32 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 33 | interface Model extends IModel { 34 | 35 | Observable getStoryList1(RequestBody body); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/MusicDetailContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | import com.winwang.storybooks.entity.AudioDetailBean; 6 | 7 | import io.reactivex.Observable; 8 | import okhttp3.RequestBody; 9 | 10 | 11 | /** 12 | * ================================================ 13 | * Description: 14 | *

15 | * Created by MVPArmsTemplate on 06/28/2019 17:22 16 | * Contact me 17 | * Follow me 18 | * Star me 19 | * See me 20 | * 模版请保持更新 21 | * ================================================ 22 | */ 23 | public interface MusicDetailContract { 24 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 25 | interface View extends IView { 26 | void setMediaUrl(String url); 27 | 28 | void updateTime(); 29 | } 30 | 31 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 32 | interface Model extends IModel { 33 | Observable getAudioDetail(RequestBody body); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/MusicHomeContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | 4 | import android.app.Activity; 5 | 6 | import com.jess.arms.mvp.IView; 7 | import com.jess.arms.mvp.IModel; 8 | import com.winwang.storybooks.entity.MusicHomeBean; 9 | 10 | import io.reactivex.Observable; 11 | import okhttp3.RequestBody; 12 | 13 | 14 | /** 15 | * ================================================ 16 | * Description: 17 | *

18 | * Created by MVPArmsTemplate on 06/27/2019 16:27 19 | * Contact me 20 | * Follow me 21 | * Star me 22 | * See me 23 | * 模版请保持更新 24 | * ================================================ 25 | */ 26 | public interface MusicHomeContract { 27 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 28 | interface View extends IView { 29 | Activity getActivity(); 30 | } 31 | 32 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 33 | interface Model extends IModel { 34 | Observable getMusicHome(RequestBody body); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/MusicListContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | 4 | import android.app.Activity; 5 | 6 | import com.jess.arms.mvp.IModel; 7 | import com.jess.arms.mvp.IView; 8 | import com.winwang.storybooks.entity.MusicListBean; 9 | 10 | import io.reactivex.Observable; 11 | import okhttp3.RequestBody; 12 | 13 | 14 | /** 15 | * ================================================ 16 | * Description: 17 | *

18 | * Created by MVPArmsTemplate on 06/27/2019 17:02 19 | * Contact me 20 | * Follow me 21 | * Star me 22 | * See me 23 | * 模版请保持更新 24 | * ================================================ 25 | */ 26 | public interface MusicListContract { 27 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 28 | interface View extends IView { 29 | Activity getActivity(); 30 | } 31 | 32 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 33 | interface Model extends IModel { 34 | Observable getMusicHome(RequestBody body); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/MyRankContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | 7 | /** 8 | * ================================================ 9 | * Description: 10 | *

11 | * Created by MVPArmsTemplate on 07/03/2019 14:32 12 | * Contact me 13 | * Follow me 14 | * Star me 15 | * See me 16 | * 模版请保持更新 17 | * ================================================ 18 | */ 19 | public interface MyRankContract { 20 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 21 | interface View extends IView { 22 | 23 | } 24 | 25 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 26 | interface Model extends IModel { 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/MyTalkContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IModel; 4 | import com.jess.arms.mvp.IView; 5 | import com.winwang.storybooks.entity.TalkBean; 6 | import com.winwang.storybooks.ui.fragment.MyTalkFragment; 7 | 8 | import io.reactivex.Observable; 9 | import okhttp3.RequestBody; 10 | 11 | 12 | /** 13 | * ================================================ 14 | * Description: 15 | *

16 | * Created by MVPArmsTemplate on 07/03/2019 14:31 17 | * Contact me 18 | * Follow me 19 | * Star me 20 | * See me 21 | * 模版请保持更新 22 | * ================================================ 23 | */ 24 | public interface MyTalkContract { 25 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 26 | interface View extends IView { 27 | MyTalkFragment getFragment(); 28 | } 29 | 30 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 31 | interface Model extends IModel { 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/SplashContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | import com.tbruyelle.rxpermissions2.RxPermissions; 6 | 7 | 8 | /** 9 | * ================================================ 10 | * Description: 11 | *

12 | * Created by MVPArmsTemplate on 06/04/2019 18:39 13 | * Contact me 14 | * Follow me 15 | * Star me 16 | * See me 17 | * 模版请保持更新 18 | * ================================================ 19 | */ 20 | public interface SplashContract { 21 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 22 | interface View extends IView { 23 | void jumpCallBack(); 24 | 25 | void setSeconds(long second); 26 | 27 | //申请权限 28 | RxPermissions getRxPermissions(); 29 | 30 | } 31 | 32 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 33 | interface Model extends IModel { 34 | void startJump(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/StoryListContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import android.app.Activity; 4 | 5 | import com.jess.arms.mvp.IView; 6 | import com.jess.arms.mvp.IModel; 7 | import com.winwang.storybooks.entity.MusicListBean; 8 | import com.winwang.storybooks.entity.StoryInListBean; 9 | import com.winwang.storybooks.entity.StoryListBean; 10 | 11 | import io.reactivex.Observable; 12 | import okhttp3.RequestBody; 13 | 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 07/01/2019 18:21 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | public interface StoryListContract { 28 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 29 | interface View extends IView { 30 | Activity getActivity(); 31 | } 32 | 33 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 34 | interface Model extends IModel { 35 | Observable getStoryListIn(RequestBody body); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/TalkContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import android.app.Activity; 4 | import android.support.v4.app.FragmentActivity; 5 | 6 | import com.jess.arms.mvp.IView; 7 | import com.jess.arms.mvp.IModel; 8 | 9 | 10 | /** 11 | * ================================================ 12 | * Description: 13 | *

14 | * Created by MVPArmsTemplate on 07/02/2019 19:52 15 | * Contact me 16 | * Follow me 17 | * Star me 18 | * See me 19 | * 模版请保持更新 20 | * ================================================ 21 | */ 22 | public interface TalkContract { 23 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 24 | interface View extends IView { 25 | FragmentActivity getActivity(); 26 | } 27 | 28 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 29 | interface Model extends IModel { 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/TalksContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import android.content.Context; 4 | import android.support.v4.app.FragmentActivity; 5 | 6 | import com.jess.arms.mvp.IView; 7 | import com.jess.arms.mvp.IModel; 8 | import com.winwang.storybooks.entity.TalkBean; 9 | 10 | import io.reactivex.Observable; 11 | import okhttp3.RequestBody; 12 | 13 | 14 | /** 15 | * ================================================ 16 | * Description: 17 | *

18 | * Created by MVPArmsTemplate on 07/03/2019 16:50 19 | * Contact me 20 | * Follow me 21 | * Star me 22 | * See me 23 | * 模版请保持更新 24 | * ================================================ 25 | */ 26 | public interface TalksContract { 27 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 28 | interface View extends IView { 29 | Context getContexts(); 30 | } 31 | 32 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 33 | interface Model extends IModel { 34 | Observable getTalkList(RequestBody body); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/contract/VideoDetailContract.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | import com.winwang.storybooks.entity.VideoBean; 6 | import com.winwang.storybooks.entity.VideoDetailBean; 7 | 8 | import io.reactivex.Observable; 9 | import okhttp3.RequestBody; 10 | 11 | 12 | /** 13 | * ================================================ 14 | * Description: 15 | *

16 | * Created by MVPArmsTemplate on 06/13/2019 19:33 17 | * Contact me 18 | * Follow me 19 | * Star me 20 | * See me 21 | * 模版请保持更新 22 | * ================================================ 23 | */ 24 | public interface VideoDetailContract { 25 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 26 | interface View extends IView { 27 | String getVideoId(); 28 | 29 | void setVideoData(String url); 30 | 31 | void setVideoCover(String cover); 32 | } 33 | 34 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 35 | interface Model extends IModel { 36 | Observable getVideoDetail(RequestBody body, String url); 37 | 38 | Observable getVideoUrl(String url); 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/MusicDetailModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.ActivityScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.entity.AudioDetailBean; 14 | import com.winwang.storybooks.http.ApiService; 15 | import com.winwang.storybooks.mvp.contract.MusicDetailContract; 16 | 17 | import io.reactivex.Observable; 18 | import okhttp3.RequestBody; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 06/28/2019 17:22 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @ActivityScope 34 | public class MusicDetailModel extends BaseModel implements MusicDetailContract.Model { 35 | @Inject 36 | Gson mGson; 37 | @Inject 38 | Application mApplication; 39 | 40 | @Inject 41 | public MusicDetailModel(IRepositoryManager repositoryManager) { 42 | super(repositoryManager); 43 | } 44 | 45 | @Override 46 | public void onDestroy() { 47 | super.onDestroy(); 48 | this.mGson = null; 49 | this.mApplication = null; 50 | } 51 | 52 | @Override 53 | public Observable getAudioDetail(RequestBody body) { 54 | Observable audioDetail = mRepositoryManager.obtainRetrofitService(ApiService.class) 55 | .getAudioDetail(body); 56 | return audioDetail; 57 | } 58 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/MusicHomeModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.ActivityScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.entity.MusicHomeBean; 14 | import com.winwang.storybooks.http.ApiService; 15 | import com.winwang.storybooks.mvp.contract.MusicHomeContract; 16 | 17 | import io.reactivex.Observable; 18 | import okhttp3.RequestBody; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 06/27/2019 16:27 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @ActivityScope 34 | public class MusicHomeModel extends BaseModel implements MusicHomeContract.Model { 35 | @Inject 36 | Gson mGson; 37 | @Inject 38 | Application mApplication; 39 | 40 | @Inject 41 | public MusicHomeModel(IRepositoryManager repositoryManager) { 42 | super(repositoryManager); 43 | } 44 | 45 | @Override 46 | public void onDestroy() { 47 | super.onDestroy(); 48 | this.mGson = null; 49 | this.mApplication = null; 50 | } 51 | 52 | @Override 53 | public Observable getMusicHome(RequestBody body) { 54 | Observable homeBeanObservable = mRepositoryManager.obtainRetrofitService(ApiService.class) 55 | .getMusicHome(body); 56 | return homeBeanObservable; 57 | } 58 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/MusicListModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.ActivityScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.entity.MusicHomeBean; 14 | import com.winwang.storybooks.entity.MusicListBean; 15 | import com.winwang.storybooks.http.ApiService; 16 | import com.winwang.storybooks.mvp.contract.MusicListContract; 17 | 18 | import io.reactivex.Observable; 19 | import okhttp3.RequestBody; 20 | 21 | 22 | /** 23 | * ================================================ 24 | * Description: 25 | *

26 | * Created by MVPArmsTemplate on 06/27/2019 17:02 27 | * Contact me 28 | * Follow me 29 | * Star me 30 | * See me 31 | * 模版请保持更新 32 | * ================================================ 33 | */ 34 | @ActivityScope 35 | public class MusicListModel extends BaseModel implements MusicListContract.Model { 36 | @Inject 37 | Gson mGson; 38 | @Inject 39 | Application mApplication; 40 | 41 | @Inject 42 | public MusicListModel(IRepositoryManager repositoryManager) { 43 | super(repositoryManager); 44 | } 45 | 46 | @Override 47 | public void onDestroy() { 48 | super.onDestroy(); 49 | this.mGson = null; 50 | this.mApplication = null; 51 | } 52 | 53 | @Override 54 | public Observable getMusicHome(RequestBody body) { 55 | Observable listBeanObservable = mRepositoryManager.obtainRetrofitService(ApiService.class) 56 | .getMusicList(body); 57 | return listBeanObservable; 58 | } 59 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/MyRankModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.FragmentScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.mvp.contract.MyRankContract; 14 | 15 | 16 | /** 17 | * ================================================ 18 | * Description: 19 | *

20 | * Created by MVPArmsTemplate on 07/03/2019 14:32 21 | * Contact me 22 | * Follow me 23 | * Star me 24 | * See me 25 | * 模版请保持更新 26 | * ================================================ 27 | */ 28 | @FragmentScope 29 | public class MyRankModel extends BaseModel implements MyRankContract.Model { 30 | @Inject 31 | Gson mGson; 32 | @Inject 33 | Application mApplication; 34 | 35 | @Inject 36 | public MyRankModel(IRepositoryManager repositoryManager) { 37 | super(repositoryManager); 38 | } 39 | 40 | @Override 41 | public void onDestroy() { 42 | super.onDestroy(); 43 | this.mGson = null; 44 | this.mApplication = null; 45 | } 46 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/MyTalkModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.FragmentScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.entity.TalkBean; 14 | import com.winwang.storybooks.http.ApiService; 15 | import com.winwang.storybooks.mvp.contract.MyTalkContract; 16 | 17 | import io.reactivex.Observable; 18 | import okhttp3.RequestBody; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 07/03/2019 14:31 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @FragmentScope 34 | public class MyTalkModel extends BaseModel implements MyTalkContract.Model { 35 | @Inject 36 | Gson mGson; 37 | @Inject 38 | Application mApplication; 39 | 40 | @Inject 41 | public MyTalkModel(IRepositoryManager repositoryManager) { 42 | super(repositoryManager); 43 | } 44 | 45 | @Override 46 | public void onDestroy() { 47 | super.onDestroy(); 48 | this.mGson = null; 49 | this.mApplication = null; 50 | } 51 | 52 | 53 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/SplashModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.ActivityScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.mvp.contract.SplashContract; 14 | 15 | 16 | /** 17 | * ================================================ 18 | * Description: 19 | *

20 | * Created by MVPArmsTemplate on 06/04/2019 18:39 21 | * Contact me 22 | * Follow me 23 | * Star me 24 | * See me 25 | * 模版请保持更新 26 | * ================================================ 27 | */ 28 | @ActivityScope 29 | public class SplashModel extends BaseModel implements SplashContract.Model { 30 | @Inject 31 | Gson mGson; 32 | @Inject 33 | Application mApplication; 34 | 35 | @Inject 36 | public SplashModel(IRepositoryManager repositoryManager) { 37 | super(repositoryManager); 38 | } 39 | 40 | @Override 41 | public void onDestroy() { 42 | super.onDestroy(); 43 | this.mGson = null; 44 | this.mApplication = null; 45 | } 46 | 47 | @Override 48 | public void startJump() { 49 | 50 | } 51 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/StoryListModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.ActivityScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.entity.MusicListBean; 14 | import com.winwang.storybooks.entity.StoryInListBean; 15 | import com.winwang.storybooks.http.ApiService; 16 | import com.winwang.storybooks.mvp.contract.StoryListContract; 17 | 18 | import io.reactivex.Observable; 19 | import okhttp3.RequestBody; 20 | 21 | 22 | /** 23 | * ================================================ 24 | * Description: 25 | *

26 | * Created by MVPArmsTemplate on 07/01/2019 18:21 27 | * Contact me 28 | * Follow me 29 | * Star me 30 | * See me 31 | * 模版请保持更新 32 | * ================================================ 33 | */ 34 | @ActivityScope 35 | public class StoryListModel extends BaseModel implements StoryListContract.Model { 36 | @Inject 37 | Gson mGson; 38 | @Inject 39 | Application mApplication; 40 | 41 | @Inject 42 | public StoryListModel(IRepositoryManager repositoryManager) { 43 | super(repositoryManager); 44 | } 45 | 46 | @Override 47 | public void onDestroy() { 48 | super.onDestroy(); 49 | this.mGson = null; 50 | this.mApplication = null; 51 | } 52 | 53 | 54 | @Override 55 | public Observable getStoryListIn(RequestBody body) { 56 | Observable inStoryList = mRepositoryManager.obtainRetrofitService(ApiService.class) 57 | .getInStoryList(body); 58 | return inStoryList; 59 | } 60 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/TalkModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.ActivityScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.mvp.contract.TalkContract; 14 | 15 | 16 | /** 17 | * ================================================ 18 | * Description: 19 | *

20 | * Created by MVPArmsTemplate on 07/02/2019 19:52 21 | * Contact me 22 | * Follow me 23 | * Star me 24 | * See me 25 | * 模版请保持更新 26 | * ================================================ 27 | */ 28 | @ActivityScope 29 | public class TalkModel extends BaseModel implements TalkContract.Model { 30 | @Inject 31 | Gson mGson; 32 | @Inject 33 | Application mApplication; 34 | 35 | @Inject 36 | public TalkModel(IRepositoryManager repositoryManager) { 37 | super(repositoryManager); 38 | } 39 | 40 | @Override 41 | public void onDestroy() { 42 | super.onDestroy(); 43 | this.mGson = null; 44 | this.mApplication = null; 45 | } 46 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/model/TalksModel.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | import com.jess.arms.integration.IRepositoryManager; 7 | import com.jess.arms.mvp.BaseModel; 8 | 9 | import com.jess.arms.di.scope.FragmentScope; 10 | 11 | import javax.inject.Inject; 12 | 13 | import com.winwang.storybooks.entity.TalkBean; 14 | import com.winwang.storybooks.http.ApiService; 15 | import com.winwang.storybooks.mvp.contract.TalksContract; 16 | 17 | import io.reactivex.Observable; 18 | import okhttp3.RequestBody; 19 | 20 | 21 | /** 22 | * ================================================ 23 | * Description: 24 | *

25 | * Created by MVPArmsTemplate on 07/03/2019 16:50 26 | * Contact me 27 | * Follow me 28 | * Star me 29 | * See me 30 | * 模版请保持更新 31 | * ================================================ 32 | */ 33 | @FragmentScope 34 | public class TalksModel extends BaseModel implements TalksContract.Model { 35 | @Inject 36 | Gson mGson; 37 | @Inject 38 | Application mApplication; 39 | 40 | @Inject 41 | public TalksModel(IRepositoryManager repositoryManager) { 42 | super(repositoryManager); 43 | } 44 | 45 | @Override 46 | public void onDestroy() { 47 | super.onDestroy(); 48 | this.mGson = null; 49 | this.mApplication = null; 50 | } 51 | 52 | @Override 53 | public Observable getTalkList(RequestBody body) { 54 | Observable talkOb = mRepositoryManager.obtainRetrofitService(ApiService.class) 55 | .getTalkList(body); 56 | return talkOb; 57 | } 58 | } -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/mvp/presenter/MyRankPresenter.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.mvp.presenter; 2 | 3 | import android.app.Application; 4 | 5 | import com.jess.arms.integration.AppManager; 6 | import com.jess.arms.di.scope.FragmentScope; 7 | import com.jess.arms.mvp.BasePresenter; 8 | import com.jess.arms.http.imageloader.ImageLoader; 9 | 10 | import me.jessyan.rxerrorhandler.core.RxErrorHandler; 11 | 12 | import javax.inject.Inject; 13 | 14 | import com.winwang.storybooks.mvp.contract.MyRankContract; 15 | 16 | 17 | /** 18 | * ================================================ 19 | * Description: 20 | *

21 | * Created by MVPArmsTemplate on 07/03/2019 14:32 22 | * Contact me 23 | * Follow me 24 | * Star me 25 | * See me 26 | * 模版请保持更新 27 | * ================================================ 28 | */ 29 | @FragmentScope 30 | public class MyRankPresenter extends BasePresenter { 31 | @Inject 32 | RxErrorHandler mErrorHandler; 33 | @Inject 34 | Application mApplication; 35 | @Inject 36 | ImageLoader mImageLoader; 37 | @Inject 38 | AppManager mAppManager; 39 | 40 | @Inject 41 | public MyRankPresenter(MyRankContract.Model model, MyRankContract.View rootView) { 42 | super(model, rootView); 43 | } 44 | 45 | @Override 46 | public void onDestroy() { 47 | super.onDestroy(); 48 | this.mErrorHandler = null; 49 | this.mAppManager = null; 50 | this.mImageLoader = null; 51 | this.mApplication = null; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/service/PlayService.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.service; 2 | 3 | import android.text.TextUtils; 4 | 5 | import com.jess.arms.base.BaseService; 6 | import com.winwang.storybooks.R; 7 | import com.winwang.storybooks.event.MusicEvent; 8 | import com.winwang.storybooks.utils.ExoMediaPlayer; 9 | 10 | import org.greenrobot.eventbus.Subscribe; 11 | import org.greenrobot.eventbus.ThreadMode; 12 | 13 | /** 14 | * Created by WinWang on 2019/6/18 15 | * Description-> 16 | */ 17 | public class PlayService extends BaseService { 18 | 19 | private ExoMediaPlayer mExoMediaPlayer; 20 | 21 | @Override 22 | public void init() { 23 | mExoMediaPlayer = new ExoMediaPlayer(this); 24 | mExoMediaPlayer.playSoundLocal(R.raw.beijing, new ExoMediaPlayer.ExoOnCompleterLister() { 25 | @Override 26 | public void onComplete() { 27 | 28 | } 29 | }, true); 30 | } 31 | 32 | 33 | @Override 34 | public boolean useEventBus() { 35 | return true; 36 | } 37 | 38 | 39 | @Override 40 | public void onDestroy() { 41 | mExoMediaPlayer.release();//释放资源 42 | super.onDestroy(); 43 | } 44 | 45 | @Subscribe(threadMode = ThreadMode.POSTING) 46 | public void pauseMusic(MusicEvent event) { 47 | if (event != null && TextUtils.equals("homePause", event.eventName)) { 48 | mExoMediaPlayer.pause(); 49 | } else if (event != null && TextUtils.equals("homePlay", event.eventName)) { 50 | mExoMediaPlayer.play(); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/utils/FileUtils.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.utils; 2 | 3 | import android.content.Context; 4 | import android.content.res.AssetManager; 5 | 6 | import java.io.BufferedInputStream; 7 | import java.io.ByteArrayOutputStream; 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | 11 | /** 12 | * Created by WinWang on 2019/6/6 13 | * Description->常用工具类 14 | */ 15 | public class FileUtils { 16 | 17 | public static String getJson(Context context, String fileName) { 18 | ByteArrayOutputStream baos = new ByteArrayOutputStream(); 19 | try { 20 | AssetManager assetManager = context.getAssets(); 21 | InputStream inputStream = assetManager.open(fileName); 22 | BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); 23 | byte[] buffer = new byte[1024]; 24 | int len; 25 | while ((len = bufferedInputStream.read(buffer)) != -1) { 26 | baos.write(buffer, 0, len); 27 | } 28 | } catch (IOException e) { 29 | e.printStackTrace(); 30 | } finally { 31 | try { 32 | baos.close(); 33 | 34 | } catch (IOException e) { 35 | e.printStackTrace(); 36 | } 37 | } 38 | return baos.toString(); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/utils/NoDoubleClickUtils.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.utils; 2 | 3 | public class NoDoubleClickUtils { 4 | private final static int SPACE_TIME = 500;//2次点击的间隔时间,单位ms 5 | private static long lastClickTime; 6 | 7 | public synchronized static boolean isDoubleClick() { 8 | long currentTime = System.currentTimeMillis(); 9 | boolean isClick; 10 | if (currentTime - lastClickTime > SPACE_TIME) { 11 | isClick = false; 12 | } else { 13 | isClick = true; 14 | } 15 | lastClickTime = currentTime; 16 | return isClick; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/utils/RxUtils.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.utils; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.utils.RxLifecycleUtils; 5 | 6 | import io.reactivex.Observable; 7 | import io.reactivex.ObservableTransformer; 8 | import io.reactivex.android.schedulers.AndroidSchedulers; 9 | import io.reactivex.annotations.NonNull; 10 | import io.reactivex.disposables.Disposable; 11 | import io.reactivex.functions.Action; 12 | import io.reactivex.functions.Consumer; 13 | import io.reactivex.schedulers.Schedulers; 14 | 15 | /** 16 | * ================================================ 17 | * 放置便于使用 RxJava 的一些工具方法 18 | *

19 | * Created by MVPArmsTemplate on 06/04/2019 13:45 20 | * Contact me 21 | * Follow me 22 | * ================================================ 23 | */ 24 | public class RxUtils { 25 | 26 | private RxUtils() { 27 | } 28 | 29 | public static ObservableTransformer applySchedulers(final IView view) { 30 | return new ObservableTransformer() { 31 | @Override 32 | public Observable apply(Observable observable) { 33 | return observable.subscribeOn(Schedulers.io()) 34 | .doOnSubscribe(new Consumer() { 35 | @Override 36 | public void accept(@NonNull Disposable disposable) throws Exception { 37 | view.showLoading();//显示进度条 38 | } 39 | }) 40 | .subscribeOn(AndroidSchedulers.mainThread()) 41 | .observeOn(AndroidSchedulers.mainThread()) 42 | .doFinally(new Action() { 43 | @Override 44 | public void run() { 45 | view.hideLoading();//隐藏进度条 46 | } 47 | }).compose(RxLifecycleUtils.bindToLifecycle(view)); 48 | } 49 | }; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/utils/customAnnotation/DoubleClick.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.utils.customAnnotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * 双击自定义注解 10 | */ 11 | @Retention(RetentionPolicy.CLASS) 12 | @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) 13 | public @interface DoubleClick { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/utils/customAnnotation/RequestPermissions.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.utils.customAnnotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Created by WinWang on 2019/5/15 10 | * Description-> 11 | */ 12 | @Target(ElementType.METHOD) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface RequestPermissions { 15 | String[] value(); 16 | } 17 | -------------------------------------------------------------------------------- /storybooks/src/main/java/com/winwang/storybooks/utils/customAnnotation/SingleClick.java: -------------------------------------------------------------------------------- 1 | package com.winwang.storybooks.utils.customAnnotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * @ClassName: SingleClick 10 | * @Description: java类作用描述 11 | * @Author: xxy 12 | * @CreateDate: 2019/5/16 10:20 13 | * @Version: 1.0 14 | */ 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) 17 | public @interface SingleClick { 18 | } 19 | 20 | -------------------------------------------------------------------------------- /storybooks/src/main/res/anim/civ_rotate_animate.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /storybooks/src/main/res/anim/translate_center_to_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /storybooks/src/main/res/anim/translate_center_to_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /storybooks/src/main/res/anim/translate_left_to_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /storybooks/src/main/res/anim/translate_right_to_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /storybooks/src/main/res/anim/virbrate_animate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/bird.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/btn_a2_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/btn_a2_n.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/btn_b2_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/btn_b2_n.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/btn_details_progress_flower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/btn_details_progress_flower.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/btn_girl_woyaojiang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/btn_girl_woyaojiang.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/dianshi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/dianshi.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/home_novoice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/home_novoice.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/home_voice1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/home_voice1.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/huyanmoshi_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/huyanmoshi_bg.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_bg.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_down.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_hot.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_kuang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_kuang.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_like.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_music.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_new.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_story.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_story.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_time.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/index_xiankan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/index_xiankan.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/list_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/list_bg.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/list_kuang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/list_kuang.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/list_kuang_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/list_kuang_hot.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/list_kuang_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/list_kuang_new.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/list_qiangxian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/list_qiangxian.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/list_story_icon_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/list_story_icon_down.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/listen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/listen.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/pic_tingting_moren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/pic_tingting_moren.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_bear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_bear.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_bg.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_like_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_like_nor.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_like_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_like_press.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_pinglun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_pinglun.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_play.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_return.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_return.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_suspend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_suspend.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_voice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_voice.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/play_voice_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/play_voice_close.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/radio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/radio.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/radio2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/radio2.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/radio3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/radio3.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/radio_cd_fengmian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/radio_cd_fengmian.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/radio_cd_shibai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/radio_cd_shibai.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/star.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/yindao_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/yindao_bg.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable-xxxhdpi/yingdao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable-xxxhdpi/yingdao.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/awkward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/awkward.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/bird_qiehuan1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/bird_qiehuan1.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/bird_qiehuan2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/bird_qiehuan2.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/btn_home_girll1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/btn_home_girll1.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/btn_home_girll2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/btn_home_girll2.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/btn_home_girll3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/btn_home_girll3.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/btn_resources_ranking_def.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/btn_resources_ranking_def.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/btn_resources_ranking_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/btn_resources_ranking_sel.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/btn_resources_woyaolu_def.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/btn_resources_woyaolu_def.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/btn_resources_woyaolu_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/btn_resources_woyaolu_sel.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/custom.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/empty.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/error.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/fly_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/girl_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_1.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_10.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_2.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_3.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_4.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_5.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_6.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_7.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_8.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_9.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_erge_b1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_erge_b1.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_erge_b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_erge_b2.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_gushi_b1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_gushi_b1.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/home_tutu_gushi_b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/home_tutu_gushi_b2.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/img.jpg -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/jiazai_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/jiazai_1.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/jiazai_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/jiazai_2.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/jiazai_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/jiazai_3.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/jiazai_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/jiazai_4.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/jiazai_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/jiazai_5.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/jiazai_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/jiazai_6.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/list_button.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/list_button.9.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/listen_zhanweifu.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/listen_zhanweifu.9.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/loading.gif -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/music.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/music_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 13 | 14 | 17 | 18 | 21 | 22 | 23 | 26 | 27 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/rank_sel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/seek_progress_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/seek_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/story_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 13 | 14 | 17 | 18 | 21 | 22 | 23 | 26 | 27 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/talk_sel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/timeout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinWang/StoryBook/4bb96e19bc47aaee3ca7d2aa24f547fdb2ea2490/storybooks/src/main/res/drawable/timeout.png -------------------------------------------------------------------------------- /storybooks/src/main/res/drawable/white_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 15 | 20 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/activity_music_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/activity_music_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 | 17 | 18 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/activity_story_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 16 | 17 | 20 | 21 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/empty_control_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 17 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/fragment_my_rank.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/fragment_my_talk.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 22 | 23 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/fragment_talks.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/include_title.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 | 17 | 24 | 25 | 26 | 34 | 35 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/item_music_home_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 12 | 13 | 14 | 19 | 20 | 26 | 27 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/item_music_list_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 12 | 13 | 14 | 19 | 20 | 26 | 27 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/item_story_list_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 12 | 13 | 14 | 19 | 20 | 26 | 27 | 32 | 33 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/item_story_music_home_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 18 | 19 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /storybooks/src/main/res/layout/item_talk_rank_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 16 | 17 | 22 | 23 | 24 |