Showing preview only (1,204K chars total). Download the full file or copy to clipboard to get everything.
Repository: Shouheng88/Android-references
Branch: master
Commit: 82aeb9174f28
Files: 411
Total size: 1.0 MB
Directory structure:
gitextract_6f4n4z2d/
├── README.md
├── advanced/
│ ├── .gitignore
│ ├── advanced.iml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── advanced/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── aidl/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── advanced/
│ │ │ └── aidl/
│ │ │ ├── INoteManager.aidl
│ │ │ └── Note.aidl
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── advanced/
│ │ │ ├── Activity2.java
│ │ │ ├── MainActivity.java
│ │ │ ├── ModuleAdvancedApp.java
│ │ │ ├── aidl/
│ │ │ │ ├── Note.java
│ │ │ │ └── NoteService.java
│ │ │ ├── callback/
│ │ │ │ ├── ActResultRequest.java
│ │ │ │ └── OnActResultEventDispatcherFragment.java
│ │ │ ├── keepalive/
│ │ │ │ └── LongLiveService.java
│ │ │ ├── messenger/
│ │ │ │ └── MessengerService.java
│ │ │ └── remote/
│ │ │ ├── Remote2Activity.java
│ │ │ └── RemoteActivity.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── activity_2.xml
│ │ │ ├── activity_advanced.xml
│ │ │ └── activity_remote.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── advanced/
│ └── ExampleUnitTest.java
├── animations/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── animations/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── animations/
│ │ │ ├── DrawableActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── ModuleAnimationsApp.java
│ │ │ └── reveal/
│ │ │ └── CircleRevealActivity.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ ├── drawable_bitmap.xml
│ │ │ ├── drawable_bitmap_no_filter.xml
│ │ │ ├── drawable_layer.xml
│ │ │ └── ic_launcher_background.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_anim.xml
│ │ │ ├── activity_circle_reveal.xml
│ │ │ └── activity_drawable.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── animations/
│ └── ExampleUnitTest.java
├── client/
│ ├── .gitignore
│ ├── app/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── channel
│ │ ├── fabric.properties
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── references/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets/
│ │ │ │ ├── camera.aar
│ │ │ │ ├── guokr.articleInline.js
│ │ │ │ ├── guokr.base.js
│ │ │ │ └── guokr_master.css
│ │ │ ├── java/
│ │ │ │ └── me/
│ │ │ │ └── shouheng/
│ │ │ │ └── references/
│ │ │ │ ├── MyApplication.java
│ │ │ │ ├── view/
│ │ │ │ │ ├── intro/
│ │ │ │ │ │ ├── AppIntroActivity.java
│ │ │ │ │ │ ├── IntroFragment.java
│ │ │ │ │ │ ├── IntroSlide1.java
│ │ │ │ │ │ ├── IntroSlide2.java
│ │ │ │ │ │ ├── IntroSlide3.java
│ │ │ │ │ │ └── IntroSlide4.java
│ │ │ │ │ └── main/
│ │ │ │ │ └── MainActivity.java
│ │ │ │ └── viewmodel/
│ │ │ │ └── MainViewModel.java
│ │ │ └── res/
│ │ │ ├── layout/
│ │ │ │ ├── activity_main.xml
│ │ │ │ └── fragment_intro_slide.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ ├── provider_paths.xml
│ │ │ └── shortcuts.xml
│ │ └── test/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── references/
│ │ └── ExampleUnitTest.java
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── palm.jks
│ └── settings.gradle
├── commons/
│ ├── .gitignore
│ ├── build.gradle
│ ├── libs/
│ │ └── pldroid-player-1.5.0.jar
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── commons/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── commons/
│ │ │ ├── BaseApplication.java
│ │ │ ├── config/
│ │ │ │ ├── BaseConstants.java
│ │ │ │ └── Configs.java
│ │ │ ├── di/
│ │ │ │ ├── AppComponent.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── ActivityScoped.java
│ │ │ │ │ └── ViewModelKey.java
│ │ │ │ └── module/
│ │ │ │ └── AppModule.java
│ │ │ ├── model/
│ │ │ │ ├── Resource.java
│ │ │ │ └── Status.java
│ │ │ ├── rxbus/
│ │ │ │ └── RxBus.java
│ │ │ ├── tools/
│ │ │ │ ├── ColorUtils.java
│ │ │ │ ├── FragmentHelper.java
│ │ │ │ ├── LogUtils.java
│ │ │ │ ├── NetworkUtils.java
│ │ │ │ ├── PalmUtils.java
│ │ │ │ ├── StringUtils.java
│ │ │ │ ├── TimeUtils.java
│ │ │ │ ├── ToastUtils.java
│ │ │ │ ├── ViewUtils.java
│ │ │ │ ├── glide/
│ │ │ │ │ └── MyAppGlideModule.java
│ │ │ │ ├── permission/
│ │ │ │ │ ├── OnGetPermissionCallback.java
│ │ │ │ │ └── PermissionUtils.java
│ │ │ │ └── theme/
│ │ │ │ ├── SystemUiVisibilityUtil.java
│ │ │ │ └── ThemeUtils.java
│ │ │ └── view/
│ │ │ ├── activity/
│ │ │ │ ├── BaseActivity.java
│ │ │ │ ├── CommonActivity.java
│ │ │ │ ├── CommonDaggerActivity.java
│ │ │ │ └── UMengActivity.java
│ │ │ ├── fragment/
│ │ │ │ ├── CommonDaggerFragment.java
│ │ │ │ └── CommonFragment.java
│ │ │ └── widget/
│ │ │ ├── CircleImageView.java
│ │ │ ├── DividerItemDecoration.java
│ │ │ ├── DragSortRecycler.java
│ │ │ ├── EmptyView.java
│ │ │ ├── SpaceItemDecoration.java
│ │ │ ├── SquareFrameLayout.java
│ │ │ └── SquareImageView.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ ├── bg_toolbar_shade.xml
│ │ │ ├── ic_account_circle_black_24dp.xml
│ │ │ ├── ic_add_black_24dp.xml
│ │ │ ├── ic_autorenew_black_24dp.xml
│ │ │ ├── ic_check_circle_black_24dp.xml
│ │ │ ├── ic_close_black_24dp.xml
│ │ │ ├── ic_favorite_black_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_launcher_foreground.xml
│ │ │ ├── ic_widgets_black_24dp.xml
│ │ │ ├── item_divider_black.xml
│ │ │ ├── item_divider_white.xml
│ │ │ └── nav_item_color.xml
│ │ ├── layout/
│ │ │ ├── layout_toolbar.xml
│ │ │ └── widget_empty_view.xml
│ │ ├── values/
│ │ │ ├── attrs.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── xml/
│ │ └── network_security_config.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── commons/
│ └── ExampleUnitTest.java
├── eyepetizer/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── eyepetizer/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── eyepetizer/
│ │ │ ├── ModuleEyepetizerApp.java
│ │ │ ├── mvp/
│ │ │ │ ├── base/
│ │ │ │ │ ├── BasePresenter.java
│ │ │ │ │ └── BaseView.java
│ │ │ │ ├── contract/
│ │ │ │ │ └── HomeContract.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── HomeModel.java
│ │ │ │ │ └── bean/
│ │ │ │ │ └── HomeBean.java
│ │ │ │ └── presenter/
│ │ │ │ └── HomePresenter.java
│ │ │ ├── net/
│ │ │ │ ├── APIRetrofit.java
│ │ │ │ └── APIService.java
│ │ │ └── ui/
│ │ │ ├── activity/
│ │ │ │ ├── ContainerActivity.java
│ │ │ │ └── HomeActivity.java
│ │ │ ├── adapter/
│ │ │ │ └── HomeAdapter.java
│ │ │ └── fragment/
│ │ │ └── VideoFragment.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ └── ic_launcher_background.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_container.xml
│ │ │ ├── activity_eyepetizer_menu.xml
│ │ │ ├── fragment_eye_video.xml
│ │ │ └── item_home.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── eyepetizer/
│ └── ExampleUnitTest.java
├── guokr/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── guokr/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── guokr/
│ │ │ ├── ModuleGuokrApp.java
│ │ │ ├── model/
│ │ │ │ ├── data/
│ │ │ │ │ ├── GuokrNews.java
│ │ │ │ │ └── GuokrNewsContent.java
│ │ │ │ └── repository/
│ │ │ │ ├── GuokrRetrofit.java
│ │ │ │ └── GuokrService.java
│ │ │ ├── view/
│ │ │ │ ├── GuokrNewsActivity.java
│ │ │ │ ├── adapter/
│ │ │ │ │ └── GuokrNewsAdapter.java
│ │ │ │ └── fragment/
│ │ │ │ ├── NewsDetailFragment.java
│ │ │ │ └── NewsListFragment.java
│ │ │ └── viewmodel/
│ │ │ └── GuokrViewModel.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ └── ic_launcher_background.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_guokr_bews.xml
│ │ │ ├── fragment_news_detail.xml
│ │ │ ├── fragment_news_list.xml
│ │ │ └── item_guokr_news.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── guokr/
│ └── ExampleUnitTest.java
├── knife-annotation/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── knife/
│ └── annotation/
│ ├── BindView.java
│ └── OnClick.java
├── knife-api/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── knife/
│ │ └── api/
│ │ ├── Injector.java
│ │ ├── MyKnife.java
│ │ ├── Unbinder.java
│ │ └── finder/
│ │ ├── ActivityFinder.java
│ │ ├── Finder.java
│ │ └── ViewFinder.java
│ └── res/
│ └── values/
│ └── strings.xml
├── knife-compiler/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── knife/
│ └── compiler/
│ ├── BindViewProcessor.java
│ ├── TypeUtils.java
│ └── model/
│ ├── AnnotatedClass.java
│ ├── BindViewField.java
│ └── OnClickMethod.java
├── layout/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── layout/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── layout/
│ │ │ ├── ModuleLayoutApp.java
│ │ │ ├── common/
│ │ │ │ └── NormalTipsFragment.java
│ │ │ └── view/
│ │ │ ├── ActivityEditLayout.java
│ │ │ ├── DrawerActivity.java
│ │ │ ├── LayoutMenuActivity.java
│ │ │ ├── adapter/
│ │ │ │ ├── AdapterUtils.java
│ │ │ │ └── BeforeAdapter.java
│ │ │ ├── bottomsheet/
│ │ │ │ └── BottomSheetActivity.java
│ │ │ ├── collapse/
│ │ │ │ └── CollapseBarStructure.java
│ │ │ ├── custom/
│ │ │ │ └── CustomView.java
│ │ │ ├── navigation/
│ │ │ │ ├── NavigationActivity.java
│ │ │ │ └── fragment/
│ │ │ │ └── PagerFragment.java
│ │ │ ├── scrolling/
│ │ │ │ └── ScrollingActivity.java
│ │ │ ├── support28/
│ │ │ │ ├── BottomAppBarActivity.java
│ │ │ │ └── Support28Activity.java
│ │ │ ├── swipe/
│ │ │ │ └── SwipeBackDemoActivity.java
│ │ │ ├── tabbed/
│ │ │ │ └── TabbedActivity.java
│ │ │ └── views/
│ │ │ ├── CustomView.java
│ │ │ ├── ViewAnimateActivity.java
│ │ │ └── ViewSystemActivity.java
│ │ └── res/
│ │ ├── anim/
│ │ │ ├── cycle_7.xml
│ │ │ ├── layout_anim.xml
│ │ │ └── shake.xml
│ │ ├── drawable/
│ │ │ ├── branded_background.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── record_anim.xml
│ │ │ └── side_nav_bar.xml
│ │ ├── drawable-v21/
│ │ │ ├── ic_menu_camera.xml
│ │ │ ├── ic_menu_gallery.xml
│ │ │ ├── ic_menu_manage.xml
│ │ │ ├── ic_menu_send.xml
│ │ │ ├── ic_menu_share.xml
│ │ │ └── ic_menu_slideshow.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_adapter.xml
│ │ │ ├── activity_bottom_app_bar.xml
│ │ │ ├── activity_bottom_sheet.xml
│ │ │ ├── activity_collapse_bar_structure.xml
│ │ │ ├── activity_drawer.xml
│ │ │ ├── activity_edit_layout.xml
│ │ │ ├── activity_layout_menu.xml
│ │ │ ├── activity_navigation.xml
│ │ │ ├── activity_scrolling.xml
│ │ │ ├── activity_support_28.xml
│ │ │ ├── activity_swipe_back.xml
│ │ │ ├── activity_tabbed.xml
│ │ │ ├── activity_view_animate.xml
│ │ │ ├── activity_view_system.xml
│ │ │ ├── app_bar_drawer.xml
│ │ │ ├── bottom_sheet_dialog.xml
│ │ │ ├── content_drawer.xml
│ │ │ ├── fragment_normal_tips.xml
│ │ │ ├── fragment_pager.xml
│ │ │ └── nav_header_drawer.xml
│ │ ├── menu/
│ │ │ ├── activity_drawer_drawer.xml
│ │ │ ├── bottom_navigation.xml
│ │ │ └── drawer.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── drawables.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── values-v21/
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── layout/
│ └── ExampleUnitTest.java
├── libraries/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── debug/
│ │ └── AndroidManifest.xml
│ ├── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── libraries/
│ │ ├── FingerprintIdentifyActivity.java
│ │ ├── MenuActivity.java
│ │ ├── ModuleLibraryApp.java
│ │ ├── MyKnifeActivity.java
│ │ ├── TimberActivity.java
│ │ ├── eventbus/
│ │ │ ├── EventBusActivity1.java
│ │ │ ├── EventBusActivity2.java
│ │ │ └── MessageWrap.java
│ │ ├── handler/
│ │ │ ├── FileRecognizeTask.java
│ │ │ └── HandlerActivity.java
│ │ ├── image/
│ │ │ ├── ClipPictureActivity.java
│ │ │ └── ImageCompressActivity.java
│ │ ├── rxjava/
│ │ │ ├── DemoFragment.java
│ │ │ ├── RxBusActivity.java
│ │ │ ├── RxJavaActivity.java
│ │ │ └── RxMessage.java
│ │ ├── serial/
│ │ │ ├── SerializeActivity.java
│ │ │ └── SerializeUtils.java
│ │ └── workmanager/
│ │ ├── PeriodicTask.java
│ │ ├── SingleTask.java
│ │ ├── SingleTask2.java
│ │ └── WorkManagerActivity.java
│ └── res/
│ ├── drawable/
│ │ └── ic_launcher_background.xml
│ ├── drawable-v24/
│ │ └── ic_launcher_foreground.xml
│ ├── layout/
│ │ ├── activity_clip_picture.xml
│ │ ├── activity_event_bus1.xml
│ │ ├── activity_event_bus2.xml
│ │ ├── activity_fingerprint_identify.xml
│ │ ├── activity_handler.xml
│ │ ├── activity_image_compress.xml
│ │ ├── activity_menu.xml
│ │ ├── activity_my_knife.xml
│ │ ├── activity_rx_bus.xml
│ │ ├── activity_rxjava.xml
│ │ ├── activity_serialize.xml
│ │ ├── activity_timber.xml
│ │ ├── activity_work_manager.xml
│ │ └── fragment_demo.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ └── values/
│ ├── colors.xml
│ ├── strings.xml
│ └── styles.xml
└── live/
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src/
├── androidTest/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── live/
│ └── ExampleInstrumentedTest.java
├── main/
│ ├── AndroidManifest.xml
│ ├── debug/
│ │ └── AndroidManifest.xml
│ ├── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── live/
│ │ ├── LiveModuleApp.java
│ │ ├── common/
│ │ │ ├── DecimalFormatUtil.java
│ │ │ └── widget/
│ │ │ └── FlutteringLayout.java
│ │ ├── model/
│ │ │ ├── LiveService.java
│ │ │ ├── data/
│ │ │ │ ├── AppStart.java
│ │ │ │ ├── Banner.java
│ │ │ │ ├── LiveInfo.java
│ │ │ │ ├── Recommend.java
│ │ │ │ ├── Room.java
│ │ │ │ ├── RoomLine.java
│ │ │ │ └── StreamSrc.java
│ │ │ └── repository/
│ │ │ └── LiveRetrofit.java
│ │ ├── view/
│ │ │ ├── Constant.java
│ │ │ ├── activity/
│ │ │ │ ├── LiveActivity.java
│ │ │ │ └── LiveRoomActivity.java
│ │ │ ├── adapter/
│ │ │ │ ├── RecommendAdapter.java
│ │ │ │ └── RecommendChildAdapter.java
│ │ │ └── fragment/
│ │ │ ├── FullscreenFragment.java
│ │ │ ├── RoomFragment.java
│ │ │ └── VideoFragment.java
│ │ └── viewmodel/
│ │ └── LiveViewModel.java
│ └── res/
│ ├── drawable/
│ │ ├── full_room_avatar_bg.xml
│ │ ├── ic_arrow_back_black_24dp.xml
│ │ ├── ic_card_giftcard_black_24dp.xml
│ │ ├── ic_forum_black_24dp.xml
│ │ ├── ic_fullscreen_black_24dp.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_mail_black_24dp.xml
│ │ ├── ic_more_vert_black_24dp.xml
│ │ ├── ic_person_add_black_24dp.xml
│ │ ├── ic_send_black_24dp.xml
│ │ └── ic_share_black_24dp.xml
│ ├── drawable-v24/
│ │ └── ic_launcher_foreground.xml
│ ├── layout/
│ │ ├── activity_live.xml
│ │ ├── activity_live_room.xml
│ │ ├── fragment_fullscreen.xml
│ │ ├── fragment_room.xml
│ │ ├── fragment_video.xml
│ │ ├── item_remmend.xml
│ │ ├── item_remmend_child.xml
│ │ └── layout_banner.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ └── values/
│ ├── attrs.xml
│ ├── colors.xml
│ ├── strings.xml
│ └── styles.xml
└── test/
└── java/
└── me/
└── shouheng/
└── live/
└── ExampleUnitTest.java
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# Awesome Android
> 该项主要用来收集和整理开发过程中经常用到的三方库和控件,并包含一些演示代码。[可以参考下文来了解更多的内容]
## 代码清单
### 1、整体结构
```
/-----
/----- advanced IPC, AIDL
/----- animations CircularReveal, TapTargetView, Ripple, etc
/----- client 整体 APP 打包
/----- commons 公共库
/----- eyepetizer 开眼视频, MVP
/----- guokr 果壳新闻
/----- knife-annotations ButterKnife 注解
/----- knife-api ButterKnife API
/----- knife-compiler ButterKnife 编译器
/----- layout MaterialDesign
/----- libraries 指纹识别, EventBus, WorkManager, Knife etc
/----- live 全民直播
```
注:各个模块借助 `ARouter` 实现了模块化开发,可以通过修改 [gradle.properties](client/gradle.properties) 中的属性来实现各个模块独立打包
### 2、视频直播
对应于 `live` 模块,该模块主要用来演示**视频直播**相关的功能:
基于《全民直播》的 API 设计的在线视频直播功能;使用了支持包里的 `Palette` 来提取图片的颜色;`MVVM` 架构设计 (在该项目中的使用不符合规范,谨慎参考);使用了pldroid-player作为视频播放的工具。
部分截图:
<div style="display:flex;" >
<img src="images/1_0.png" width="24%" >
<img style="margin-left:10px;" src="images/1_1.png" width="24%" >
<img style="margin-left:10px;" src="images/1_2.png" width="24%" >
<img style="margin-left:10px;" src="images/1_3.png" width="24%" >
</div>
### 3、果壳新闻
对应于 `guokr` 模块,该模块主要用来演示`OkHttp + Retrofit + RexJava`的开发方式:
基于《果壳网》 API 设计的新闻客户端,包含基本的"列表-详情"结构;MVVM 架构设计 (在该项目中的使用不符合规范,谨慎参考)。
<div style="display:flex;" >
<img src="images/2_1.png" width="24%" >
<img style="margin-left:10px;" src="images/2_2.png" width="24%" >
</div>
### 4、开眼视频
对应于 `eyepetizer` 模块,该模块主要用来演示**小视频**类型的 APP 相关的功能,同时演示 `MVP` 架构模式在 Android 端的使用方式:
MVP 架构设计;基于《开眼视频》的 API 设计视频浏览客户端。
注:项目比较小,功能比较少,主要用来演示核心的网络视频播放功能。
### 5、MaterialDesign
对应于 `layout` 模块,该模块主要用来整理 MaterialDesign 相关的布局和控件,目前包含的布局有:
`Navigation`、`Tabbed`、`Bottom sheet`、`Scrolling`、`Collapse`、`Support 28` 中的部分控件。
<div style="display:flex;" >
<img src="images/3_1.png" width="19%" >
<img style="margin-left:10px;" src="images/3_2.png" width="19%" >
<img style="margin-left:10px;" src="images/3_3.png" width="19%" >
<img style="margin-left:10px;" src="images/3_4.png" width="19%" >
<img style="margin-left:10px;" src="images/3_5.png" width="19%" >
</div>
### 6、其他
1. 自定义类似于 `ButterKnife` 的库,文件路径包含 [knife-annotation](knife-annotation)、[knife-api](knife-api) 和 [knife-compiler](knife-compiler)
该部分内容需要使用 Java 中的注解以及注解处理,你可以通过这篇文章来了解这部分功能如何实现:[《Java 注解及其在 Android 中的应用》](https://juejin.im/post/5b824b8751882542f105447d)
2. 使用 `RxJava2` 搭建一个 `EventBus`,文件路径在 [rxbus](commons\src\main\java\me\shouheng\commons\rxbus)
该部分使用 `RxJava2` 实现一个类似于 `EventBus` 的全局通信的框架,相关的知识可以通过这篇文章进行了解:[《RxJava2 系列 (3):使用 Subject》](https://juejin.im/post/5b801dfa51882542cb409905)
3. 在该项目中使用了 `MVP` 和 `MVVM` 两种架构设计方式,同时使用了 `ARouter` 来实现了模块化开发,你可以通过这篇文章来了解相关的知识:[《Android 架构设计:MVC、MVP、MVVM和组件化》](https://juejin.im/post/5b7c1706f265da436d7e408e)
4. 如果你希望了解 `OkHttp` 的源码相关的知识,请参考我的这篇文章:[《Andriod 网络框架 OkHttp 源码解析》](https://juejin.im/post/5bc89fbc5188255c713cb8a5)
4. 如果你希望了解 `Retrofit` 的源码相关的知识,其中使用了哪些设计模式等等,请参考我的这篇文章:[《Android 网络框架 Retrofit 源码解析》](https://juejin.im/post/5bd05d5c6fb9a05d2b6dfc46)
================================================
FILE: advanced/.gitignore
================================================
/build
================================================
FILE: advanced/advanced.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":advanced" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../client" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":advanced" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/debug/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/data-binding" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/data_binding_base_class_log_artifact" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/data_binding_base_class_logs_dependency_artifacts" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/processing-tools" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Gradle: com.android.support:documentfile-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:print-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:28.0.0-rc02@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:interpolator-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.crashlytics.sdk.android:crashlytics-core-2.6.2" level="project" />
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.2.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:versionedparcelable-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.github.CymChad:BaseRecyclerViewAdapterHelper-2.9.40" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: commons-io:commons-io:2.6@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-media-compat-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:loader-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide-4.7.1" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:F.\Codes\Android\Projects\References\commons\libs\pldroid-player-1.5.0.jar:unspecified@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-28.0.0-rc02" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:multidex-1.0.2" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.databinding:adapters-3.1.3" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:3.0.1@jar" level="project" />
<orderEntry type="library" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.meituan.android.walle:library-1.1.6" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-1.1.0" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:runtime-1.1.1" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor-1.0.2" level="project" />
<orderEntry type="library" name="Gradle: com.crashlytics.sdk.android:beta-1.2.7" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:adapter-rxjava2:2.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.google.dagger:dagger-android-2.13" level="project" />
<orderEntry type="library" name="Gradle: io.fabric.sdk.android:fabric-1.4.2" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:slidingpanelayout-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.databinding:library-3.1.3" level="project" />
<orderEntry type="library" name="Gradle: com.meituan.android.walle:payload_reader:1.1.6@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:cursoradapter-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:transition-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.1" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:coordinatorlayout-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:customview-28.0.0-rc02" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-1.0.2" level="project" />
<orderEntry type="library" name="Gradle: com.alibaba:arouter-annotation:1.0.4@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:palette-v7-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.jakewharton.timber:timber-4.7.1" level="project" />
<orderEntry type="library" name="Gradle: com.crashlytics.sdk.android:crashlytics-2.9.2" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:drawerlayout-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel-1.1.1" level="project" />
<orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-v4-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: org.ocpsoft.prettytime:prettytime:4.0.1.Final@jar" level="project" />
<orderEntry type="library" name="Gradle: com.yanzhenjie:recyclerview-swipe-1.1.4" level="project" />
<orderEntry type="library" name="Gradle: com.alibaba:arouter-api-1.3.1" level="project" />
<orderEntry type="library" name="Gradle: joda-time:joda-time:2.9.9@jar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:disklrucache:4.7.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains:annotations:16.0.1@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:extensions-1.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-3.0.2" level="project" />
<orderEntry type="library" name="Gradle: com.yanzhenjie:loading-1.0.2" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:asynclayoutinflater-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:swiperefreshlayout-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid-2.0.2" level="project" />
<orderEntry type="library" name="Gradle: top.zibin:Luban-1.1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.databinding:baseLibrary:3.1.3@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:cardview-v7-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:viewpager-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.google.dagger:dagger:2.13@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-3.0.2" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.10.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:localbroadcastmanager-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-fragment-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-compat-28.0.0-rc02" level="project" />
<orderEntry type="library" name="Gradle: com.timehop.stickyheadersrecyclerview:library-0.4.3" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder-4.7.1" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:collections:28.0.0-rc02@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:design-28.0.0-rc02" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.7.1@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core-1.1.1" level="project" />
<orderEntry type="library" name="Gradle: com.crashlytics.sdk.android:answers-1.4.1" level="project" />
<orderEntry type="library" name="Gradle: com.umeng.sdk:analytics:7.5.3@jar" level="project" />
<orderEntry type="library" name="Gradle: com.google.dagger:dagger-android-support-2.13" level="project" />
<orderEntry type="library" name="Gradle: com.umeng.sdk:common:1.5.3@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-28.0.0-rc02" level="project" />
<orderEntry type="module" module-name="commons" />
</component>
</module>
================================================
FILE: advanced/build.gradle
================================================
println isAdvancedModuleApp.toBoolean()
apply plugin: "build-time-tracker"
if (isAdvancedModuleApp.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
apply plugin: 'com.getkeepsafe.dexcount'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// use data binding
dataBinding {
enabled = true
}
// use java 8 language
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// use external libs folder
sourceSets {
main {
jniLibs.srcDirs = ['libs']
if (isAdvancedModuleApp.toBoolean()) {
manifest.srcFile "src/main/debug/AndroidManifest.xml"
} else {
manifest.srcFile "src/main/AndroidManifest.xml"
}
}
}
// dex count. see https://github.com/KeepSafe/dexcount-gradle-plugin
dexcount {
format = "list"
includeClasses = false
includeClassCount = false
includeFieldCount = true
includeTotalMethodCount = false
orderByMethodCount = false
verbose = false
maxTreeDepth = Integer.MAX_VALUE
teamCityIntegration = false
teamCitySlug = null
runOnEachPackage = true
// maxMethodCount = 64000
enabled = true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
testImplementation 'org.mockito:mockito-inline:2.22.0'
androidTestImplementation 'org.mockito:mockito-inline:2.22.0'
// router
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
// projects
implementation project(':commons')
}
================================================
FILE: advanced/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: advanced/src/androidTest/java/me/shouheng/advanced/ExampleInstrumentedTest.java
================================================
package me.shouheng.advanced;
import android.content.Context;
import org.junit.Test;
import org.junit.runner.RunWith;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static org.junit.Assert.assertEquals;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("me.shouheng.advanced.test", appContext.getPackageName());
}
public void testClick(int id) {
onView(withId(id)).perform(click());
}
}
================================================
FILE: advanced/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.shouheng.advanced" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity"/>
<activity android:name=".remote.RemoteActivity"
android:process=":remote"/>
<activity android:name=".remote.Remote2Activity"
android:process="remote.sample"/>
<service android:name=".aidl.NoteService"
android:process=":remote"/>
<service android:name=".messenger.MessengerService"
android:process=":remote"/>
<activity android:name=".Activity2"/>
<service android:name=".keepalive.LongLiveService"/>
</application>
</manifest>
================================================
FILE: advanced/src/main/aidl/me/shouheng/advanced/aidl/INoteManager.aidl
================================================
package me.shouheng.advanced.aidl;
import me.shouheng.advanced.aidl.Note;
interface INoteManager {
Note getNote(long id);
void addNote(long id, String name);
}
================================================
FILE: advanced/src/main/aidl/me/shouheng/advanced/aidl/Note.aidl
================================================
package me.shouheng.advanced.aidl;
parcelable Note;
================================================
FILE: advanced/src/main/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.shouheng.advanced" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name=".ModuleAdvancedApp"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".remote.RemoteActivity"
android:process=":remote"/>
<activity android:name=".remote.Remote2Activity"
android:process="remote.sample"/>
<service android:name=".aidl.NoteService"
android:process=":remote"/>
<service android:name=".messenger.MessengerService"
android:process=":remote"/>
<activity android:name=".Activity2"/>
<service android:name=".keepalive.LongLiveService"/>
</application>
</manifest>
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/Activity2.java
================================================
package me.shouheng.advanced;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import me.shouheng.advanced.databinding.Activity2Binding;
import me.shouheng.commons.view.activity.CommonActivity;
/**
* Created on 2018/12/26.
*/
public class Activity2 extends CommonActivity<Activity2Binding> {
public static final String EXTRA_KEY_NAME = "EXTRA";
@Override
protected int getLayoutResId() {
return R.layout.activity_2;
}
@Override
protected void doCreateView(Bundle savedInstanceState) {
getBinding().cfrm.setOnClickListener(v -> {
Intent intent = new Intent();
intent.putExtra(EXTRA_KEY_NAME, getBinding().et.getText().toString());
setResult(Activity.RESULT_OK, intent);
finish();
});
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/MainActivity.java
================================================
package me.shouheng.advanced;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import androidx.annotation.Nullable;
import me.shouheng.advanced.aidl.INoteManager;
import me.shouheng.advanced.aidl.Note;
import me.shouheng.advanced.aidl.NoteService;
import me.shouheng.advanced.callback.ActResultRequest;
import me.shouheng.advanced.databinding.ActivityAdvancedBinding;
import me.shouheng.advanced.keepalive.LongLiveService;
import me.shouheng.advanced.messenger.MessengerService;
import me.shouheng.commons.config.BaseConstants;
import me.shouheng.commons.tools.LogUtils;
import me.shouheng.commons.tools.ToastUtils;
import me.shouheng.commons.view.activity.CommonActivity;
/**
* @author shouh
* @version $Id: MainActivity, v 0.1 2018/10/22 21:36 shouh Exp$
*/
@Route(path = BaseConstants.ADVANCED_MENU)
public class MainActivity extends CommonActivity<ActivityAdvancedBinding> {
private INoteManager noteManager;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
noteManager = INoteManager.Stub.asInterface(service);
try {
Note note = noteManager.getNote(100);
LogUtils.d(note);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) { }
};
public static final int MSG_REPLAY_ID = 0x0012;
public static final String MSG_EXTRA_REPLAY_STRING = "__extra_replay_string";
private boolean serviceConnected = false;
private Messenger boundServiceMessenger = null;
private final Messenger receiveMessenger = new Messenger(new ReceiveMessHandler());
private ServiceConnection msgConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
boundServiceMessenger = new Messenger(service);
serviceConnected = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
serviceConnected = false;
}
};
private static class ReceiveMessHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_REPLAY_ID:
ToastUtils.makeToast("收到返回结果:"+msg.getData().getString(MSG_EXTRA_REPLAY_STRING));
break;
}
}
}
@Override
protected int getLayoutResId() {
return R.layout.activity_advanced;
}
@Override
protected void doCreateView(Bundle savedInstanceState) {
/* 开启远程的活动 */
getBinding().btnRemote.setOnClickListener(v ->
ARouter.getInstance().build(BaseConstants.ADVANCED_REMOTE)
.withString(BaseConstants.ADVANCED_REMOTE_ARG_CONTENT, "Simple advanced content")
.navigation());
getBinding().btnRemote2.setOnClickListener(v ->
ARouter.getInstance().build(BaseConstants.ADVANCED_REMOTE2)
.withString(BaseConstants.ADVANCED_REMOTE2_ARG_CONTENT, "Simple advanced content 2")
.navigation());
/* 两种获取程序执行结果的效果的对比 */
getBinding().btnResult.setOnClickListener(v -> {
Intent intent = new Intent(this, Activity2.class);
ActResultRequest request = new ActResultRequest(this);
/* 实际的原理就是通过一个没有背景的 fragment 来发起请求并在其中处理请求并进行回调
* 问题:当不保留活动的时候 GG */
request.startForResult(intent, 1, (resultCode, data) -> {
String result = data.getStringExtra(Activity2.EXTRA_KEY_NAME);
ToastUtils.makeToast(result);
});
});
getBinding().btnResult2.setOnClickListener(v -> {
/* 正常的启动活动并获取结果的逻辑,即使不保留活动也正常运行 */
Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, 0);
});
/* 跨进程获取笔记信息 */
getBinding().btnDisplay.setOnClickListener(v -> {
try {
Note note = noteManager.getNote(100);
ToastUtils.makeToast(note + "");
} catch (RemoteException e) {
e.printStackTrace();
}
});
/* 启动前台服务 */
getBinding().btnFore.setOnClickListener(v -> {
Intent intent = new Intent(this, LongLiveService.class);
startService(intent);
});
/* 使用 Messenger 发送消息 */
getBinding().btnMessenger.setOnClickListener(v -> {
Message message = Message.obtain(null, MessengerService.MSG_SAY_SOMETHING);
message.replyTo = receiveMessenger;
Bundle bundle = new Bundle();
bundle.putString(MessengerService.MSG_EXTRA_COMMAND, "11111");
message.setData(bundle);
try {
boundServiceMessenger.send(message);
} catch (RemoteException ex) {
ex.printStackTrace();
}
});
/* 绑定 NoteService */
// Intent intent = new Intent(this, NoteService.class);
// bindService(intent, connection, Context.BIND_AUTO_CREATE);
/* 绑定 MessengerService */
Intent intent1 = new Intent(this, MessengerService.class);
bindService(intent1, msgConn, Context.BIND_AUTO_CREATE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
assert data != null;
String result = data.getStringExtra(Activity2.EXTRA_KEY_NAME);
ToastUtils.makeToast(result);
break;
default:
// do nothing
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
if (serviceConnected) {
unbindService(msgConn);
}
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/ModuleAdvancedApp.java
================================================
package me.shouheng.advanced;
import com.alibaba.android.arouter.launcher.ARouter;
import me.shouheng.commons.BaseApplication;
/**
* @author shouh
* @version $Id: ModuleGuokrApp, v 0.1 2018/6/6 22:30 shouh Exp$
*/
public class ModuleAdvancedApp extends BaseApplication {
private static ModuleAdvancedApp application;
public static ModuleAdvancedApp getContext() {
return application;
}
@Override
public void onCreate() {
super.onCreate();
application = this;
ARouter.init(this);
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/aidl/Note.java
================================================
package me.shouheng.advanced.aidl;
import android.os.Parcel;
import android.os.Parcelable;
/**
* @author shouh
* @version $Id: Note, v 0.1 2018/10/22 22:27 shouh Exp$
*/
public class Note implements Parcelable {
public final long id;
public final String name;
public Note(long id, String name) {
this.id = id;
this.name = name;
}
protected Note(Parcel in) {
id = in.readLong();
name = in.readString();
}
public static final Creator<Note> CREATOR = new Creator<Note>() {
@Override
public Note createFromParcel(Parcel in) {
return new Note(in);
}
@Override
public Note[] newArray(int size) {
return new Note[size];
}
};
@Override
public String toString() {
return "Note{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(id);
dest.writeString(name);
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/aidl/NoteService.java
================================================
package me.shouheng.advanced.aidl;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import androidx.annotation.Nullable;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.functions.Consumer;
import me.shouheng.advanced.MainActivity;
import me.shouheng.advanced.R;
import me.shouheng.commons.tools.LogUtils;
/**
* @author shouh
* @version $Id: NoteService, v 0.1 2018/10/23 21:20 shouh Exp$
*/
public class NoteService extends Service {
private CopyOnWriteArrayList<Note> notes = new CopyOnWriteArrayList<>();
private Binder binder = new INoteManager.Stub() {
@Override
public Note getNote(long id) {
return Observable.fromIterable(notes).filter(note -> note.id == id).singleOrError().blockingGet();
}
@Override
public void addNote(long id, String name) {
notes.add(new Note(id, name));
}
};
@Override
public void onCreate() {
super.onCreate();
notes.add(new Note(100, "Note 100"));
notes.add(new Note(101, "Note 101"));
LogUtils.d("========== onCreate()");
Notification notification = new Notification.Builder(getApplicationContext())
.setContentTitle("Content Title")
.setContentText("Content Text")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.build();
Intent intent = new Intent(this, MainActivity.class);
notification.contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
startForeground(1, notification);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
LogUtils.d("========== onBind()");
Observable.interval(1, TimeUnit.SECONDS).subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
LogUtils.d("========== " + aLong);
}
});
return binder;
}
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
LogUtils.d("========== onRebind()");
}
@Override
public boolean onUnbind(Intent intent) {
LogUtils.d("========== onUnbind()");
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
LogUtils.d("========== onDestroy()");
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/callback/ActResultRequest.java
================================================
package me.shouheng.advanced.callback;
import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
/**
* Created on 2018/12/26.
*/
public class ActResultRequest {
private OnActResultEventDispatcherFragment fragment;
/**
* new 一个 ActResultRequest 的时候会初始化一个没有背景的 Fragment
*
* @param activity
*/
public ActResultRequest(AppCompatActivity activity) {
fragment = getEventDispatchFragment(activity);
}
private OnActResultEventDispatcherFragment getEventDispatchFragment(AppCompatActivity activity) {
final FragmentManager fragmentManager = activity.getSupportFragmentManager();
OnActResultEventDispatcherFragment fragment = findEventDispatchFragment(fragmentManager);
if (fragment == null) {
fragment = new OnActResultEventDispatcherFragment();
fragmentManager
.beginTransaction()
.add(fragment, OnActResultEventDispatcherFragment.TAG)
.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
}
return fragment;
}
private OnActResultEventDispatcherFragment findEventDispatchFragment(FragmentManager manager) {
return (OnActResultEventDispatcherFragment) manager.findFragmentByTag(OnActResultEventDispatcherFragment.TAG);
}
/**
* 当调用 startForResult 的时候,实际上是调用 fragment 的 startForResult 方法
*
* @param intent
* @param requestCode
* @param callback
*/
public void startForResult(Intent intent, int requestCode, Callback callback) {
fragment.startForResult(intent, requestCode, callback);
}
public interface Callback {
void onActivityResult(int resultCode, Intent data);
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/callback/OnActResultEventDispatcherFragment.java
================================================
package me.shouheng.advanced.callback;
import android.content.Intent;
import android.os.Bundle;
import android.util.SparseArray;
import androidx.fragment.app.Fragment;
/**
* Created on 2018/12/26.
*/
public class OnActResultEventDispatcherFragment extends Fragment {
public static final String TAG = "on_act_result_event_dispatcher";
private SparseArray<ActResultRequest.Callback> mCallbacks = new SparseArray<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
/**
* 这里的 fragment 调用自己的 startActivityForResult 方法来获取结果
*
* @param intent
* @param requestCode
* @param callback
*/
public void startForResult(Intent intent, int requestCode, ActResultRequest.Callback callback) {
mCallbacks.put(requestCode, callback);
startActivityForResult(intent, requestCode);
}
/**
* 当拿到结果之后从列表中找出回调并调用
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ActResultRequest.Callback callback = mCallbacks.get(requestCode);
mCallbacks.remove(requestCode);
if (callback != null) {
callback.onActivityResult(resultCode, data);
}
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/keepalive/LongLiveService.java
================================================
package me.shouheng.advanced.keepalive;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import java.util.concurrent.TimeUnit;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import io.reactivex.Observable;
import me.shouheng.advanced.MainActivity;
import me.shouheng.advanced.R;
import me.shouheng.commons.tools.LogUtils;
/**
* 通过设置为前台服务的形式进行保活
* 另外还有在 onStartCommand() 中返回 START_STICKY
*
* Created on 2018/12/26.
*/
public class LongLiveService extends Service {
@Override
public void onCreate() {
/* 启动前台服务保活 */
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationManager notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence name = "FOREGROUND";
String description = "";
NotificationChannel channel;
int importance = NotificationManager.IMPORTANCE_DEFAULT;
channel = new NotificationChannel("ChannelId", name, importance);
channel.setDescription(description);
notificationManager.createNotificationChannel(channel);
}
Notification notification = new NotificationCompat.Builder(getApplicationContext(), "ChannelId")
.setContentTitle("Content Title 2")
.setContentText("Content Text 2")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.build();
Intent intent = new Intent(this, MainActivity.class);
notification.contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
startForeground(2, notification);
/* 每隔 1 秒的时间输出一个日志 */
Observable.interval(1, TimeUnit.SECONDS).subscribe(aLong -> LogUtils.d("LongLive " + aLong)).isDisposed();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
/* 返回 START_STICKY,可以做到在“正在运行的服务”中停止的时候自启 */
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public void onRebind(Intent intent) {
// do nothing
}
@Override
public void onDestroy() {
Intent intent = new Intent(this, LongLiveService.class);
startService(intent);
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/messenger/MessengerService.java
================================================
package me.shouheng.advanced.messenger;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import java.lang.ref.WeakReference;
import androidx.annotation.Nullable;
import me.shouheng.commons.tools.ToastUtils;
import static me.shouheng.advanced.MainActivity.MSG_EXTRA_REPLAY_STRING;
import static me.shouheng.advanced.MainActivity.MSG_REPLAY_ID;
/**
* @author WngShhng (shouheng2015@gmail.com)
* @version $Id: MessengerService, v 0.1 2019/2/16 14:38 shouh Exp$
*/
public class MessengerService extends Service {
public static final int MSG_SAY_SOMETHING = 11;
public static final String MSG_EXTRA_COMMAND = "__extra_command";
private static class MessengerHandler extends Handler {
private WeakReference<Service> serviceRef;
MessengerHandler(Service service) {
this.serviceRef = new WeakReference<>(service);
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SAY_SOMETHING:
ToastUtils.makeToast("远程服务收到消息,内容是:" + msg.getData().getString(MSG_EXTRA_COMMAND));
// 向客户端返回消息
Messenger client = msg.replyTo;
Message message = Message.obtain(null, MSG_REPLAY_ID);
Bundle bundle = new Bundle();
bundle.putString(MSG_EXTRA_REPLAY_STRING, "00000");
message.setData(bundle);
try {
client.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
}
}
private Messenger messenger = new Messenger(new MessengerHandler(this));
@Nullable
@Override
public IBinder onBind(Intent intent) {
ToastUtils.makeToast("MessengerService bound!");
return messenger.getBinder();
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/remote/Remote2Activity.java
================================================
package me.shouheng.advanced.remote;
import android.os.Bundle;
import com.alibaba.android.arouter.facade.annotation.Route;
import me.shouheng.advanced.R;
import me.shouheng.advanced.databinding.ActivityRemoteBinding;
import me.shouheng.commons.config.BaseConstants;
import me.shouheng.commons.view.activity.CommonActivity;
/**
* @author shouh
* @version $Id: Remote2Activity, v 0.1 2018/10/22 22:15 shouh Exp$
*/
@Route(path = BaseConstants.ADVANCED_REMOTE2)
public class Remote2Activity extends CommonActivity<ActivityRemoteBinding> {
@Override
protected int getLayoutResId() {
return R.layout.activity_remote;
}
@Override
protected void doCreateView(Bundle savedInstanceState) {
String content = getIntent().getStringExtra(BaseConstants.ADVANCED_REMOTE2_ARG_CONTENT);
getBinding().tvContent.setText(content);
}
}
================================================
FILE: advanced/src/main/java/me/shouheng/advanced/remote/RemoteActivity.java
================================================
package me.shouheng.advanced.remote;
import android.os.Bundle;
import com.alibaba.android.arouter.facade.annotation.Route;
import me.shouheng.advanced.R;
import me.shouheng.advanced.databinding.ActivityRemoteBinding;
import me.shouheng.commons.config.BaseConstants;
import me.shouheng.commons.view.activity.CommonActivity;
/**
* @author shouh
* @version $Id: RemoteActivity, v 0.1 2018/10/22 22:03 shouh Exp$
*/
@Route(path = BaseConstants.ADVANCED_REMOTE)
public class RemoteActivity extends CommonActivity<ActivityRemoteBinding> {
@Override
protected int getLayoutResId() {
return R.layout.activity_remote;
}
@Override
protected void doCreateView(Bundle savedInstanceState) {
String content = getIntent().getStringExtra(BaseConstants.ADVANCED_REMOTE_ARG_CONTENT);
getBinding().tvContent.setText(content);
}
}
================================================
FILE: advanced/src/main/res/layout/activity_2.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:orientation="vertical"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et"
android:hint="Say something..."
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/cfrm"
android:text="Confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
================================================
FILE: advanced/src/main/res/layout/activity_advanced.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:fitsSystemWindows="true"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_remote"
android:text="Start Remote Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_remote2"
android:text="Start Remote Activity 2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_result"
android:text="Start For Result CALLBACK"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_result2"
android:text="Start For Result NORMAL"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_display"
android:text="Display NoteManager info"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_fore"
android:text="启动前台服务"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_messenger"
android:text="使用 Messenger 发送消息"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
================================================
FILE: advanced/src/main/res/layout/activity_remote.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:fitsSystemWindows="true"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_content"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
================================================
FILE: advanced/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">Advanced</string>
</resources>
================================================
FILE: advanced/src/main/res/values/styles.xml
================================================
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorAccent</item>
<item name="colorPrimaryDark">#0068db</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
================================================
FILE: advanced/src/test/java/me/shouheng/advanced/ExampleUnitTest.java
================================================
package me.shouheng.advanced;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
================================================
FILE: animations/.gitignore
================================================
/build
================================================
FILE: animations/build.gradle
================================================
println isAnimationsModuleApp.toBoolean()
if (isAnimationsModuleApp.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// use data binding
dataBinding {
enabled = true
}
// use java 8 language
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// use external libs folder
sourceSets {
main {
jniLibs.srcDirs = ['libs']
if (isAnimationsModuleApp.toBoolean()) {
manifest.srcFile "src/main/debug/AndroidManifest.xml"
} else {
manifest.srcFile "src/main/AndroidManifest.xml"
}
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
// router
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
// CircularReveal
implementation ('com.github.ozodrukh:CircularReveal:2.0.1@aar') {
transitive = true
}
// target view
implementation 'com.getkeepsafe.taptargetview:taptargetview:1.12.0'
// ripple
implementation 'com.balysv:material-ripple:1.0.2'
// projects
implementation project(':commons')
}
================================================
FILE: animations/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: animations/src/androidTest/java/me/shouheng/animations/ExampleInstrumentedTest.java
================================================
package me.shouheng.animations;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("me.shouheng.animations", appContext.getPackageName());
}
}
================================================
FILE: animations/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.shouheng.animations">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity"/>
<activity android:name=".reveal.CircleRevealActivity"/>
<activity android:name=".DrawableActivity"/>
</application>
</manifest>
================================================
FILE: animations/src/main/debug/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.shouheng.animations">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name=".ModuleAnimationsApp"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".reveal.CircleRevealActivity"/>
<activity android:name=".DrawableActivity"/>
</application>
</manifest>
================================================
FILE: animations/src/main/java/me/shouheng/animations/DrawableActivity.java
================================================
package me.shouheng.animations;
import android.os.Bundle;
import com.alibaba.android.arouter.facade.annotation.Route;
import me.shouheng.animations.databinding.ActivityDrawableBinding;
import me.shouheng.commons.config.BaseConstants;
import me.shouheng.commons.view.activity.CommonActivity;
/**
* Created by WngShhng on 2018/10/17.
*/
@Route(path = BaseConstants.ANIMATIONS_DRAWABLE)
public class DrawableActivity extends CommonActivity<ActivityDrawableBinding> {
@Override
protected int getLayoutResId() {
return R.layout.activity_drawable;
}
@Override
protected void doCreateView(Bundle savedInstanceState) {
}
}
================================================
FILE: animations/src/main/java/me/shouheng/animations/MainActivity.java
================================================
package me.shouheng.animations;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.balysv.materialripple.MaterialRippleLayout;
import com.getkeepsafe.taptargetview.TapTarget;
import com.getkeepsafe.taptargetview.TapTargetSequence;
import me.shouheng.animations.databinding.ActivityAnimBinding;
import me.shouheng.commons.config.BaseConstants;
import me.shouheng.commons.tools.PalmUtils;
import me.shouheng.commons.tools.ToastUtils;
import me.shouheng.commons.view.activity.CommonActivity;
@Route(path = BaseConstants.ANIMATIONS_MENU)
public class MainActivity extends CommonActivity<ActivityAnimBinding> {
@Override
protected int getLayoutResId() {
return R.layout.activity_anim;
}
@Override
protected void doCreateView(Bundle savedInstanceState) {
getBinding().btnReveal.setOnClickListener(v -> ARouter.getInstance().build(BaseConstants.ANIMATIONS_CIRCLE_REVEAL).navigation());
getBinding().btnToast.setOnClickListener(v -> showToastWithIcon());
getBinding().tvDrawable.setOnClickListener(v -> ARouter.getInstance().build(BaseConstants.ANIMATIONS_DRAWABLE).navigation());
configMaterialRipple();
configTargetView();
}
private void showToastWithIcon() {
Toast toast = new Toast(this);
toast.setDuration(Toast.LENGTH_LONG);
LinearLayout ly = new LinearLayout(MainActivity.this);
ly.setGravity(Gravity.CENTER_VERTICAL);
ImageView iv = new ImageView(MainActivity.this);
iv.setImageResource(R.mipmap.ic_launcher);
TextView tv = new TextView(MainActivity.this);
tv.setText("Test toast message");
ly.addView(tv);
ly.addView(iv);
toast.setView(ly);
toast.show();
}
private void configMaterialRipple() {
MaterialRippleLayout.on(getBinding().tvRipple)
.rippleAlpha(0.2f)
.rippleHover(true)
.rippleColor(Color.BLUE)
.create();
MaterialRippleLayout.on(getBinding().tvRipple2)
.rippleColor(Color.parseColor("#FF0000"))
.rippleAlpha(0.2f)
.rippleHover(true)
.create();
getBinding().tvRipple.setOnClickListener(v -> ToastUtils.makeToast("Ripple1"));
getBinding().tvRipple2.setOnClickListener(v -> ToastUtils.makeToast("Ripple2"));
}
private void configTargetView() {
Rect rect = new Rect(100, 100, 100, 100);
new TapTargetSequence(this)
.targets(
TapTarget.forView(getBinding().btnReveal, "Gonna"),
TapTarget.forView(getBinding().btnToast, "You", "Up")
.dimColorInt(Color.RED)
.outerCircleColorInt(Color.GREEN)
.targetCircleColorInt(Color.BLUE)
.textColorInt(Color.WHITE),
TapTarget.forBounds(rect, "Down", ":^)")
.cancelable(false)
.icon(PalmUtils.getDrawableCompact(R.drawable.ic_account_circle_black_24dp)))
.listener(new TapTargetSequence.Listener() {
@Override
public void onSequenceFinish() {
ToastUtils.makeToast("onSequenceFinish");
}
@Override
public void onSequenceStep(TapTarget lastTarget, boolean targetClicked) {
ToastUtils.makeToast("onSequenceStep");
}
@Override
public void onSequenceCanceled(TapTarget lastTarget) {
ToastUtils.makeToast("onSequenceCanceled");
}
}).start();
}
}
================================================
FILE: animations/src/main/java/me/shouheng/animations/ModuleAnimationsApp.java
================================================
package me.shouheng.animations;
import com.alibaba.android.arouter.launcher.ARouter;
import me.shouheng.commons.BaseApplication;
/**
* @author shouh
* @version $Id: ModuleGuokrApp, v 0.1 2018/6/6 22:30 shouh Exp$
*/
public class ModuleAnimationsApp extends BaseApplication {
private static ModuleAnimationsApp application;
public static ModuleAnimationsApp getContext() {
return application;
}
@Override
public void onCreate() {
super.onCreate();
application = this;
ARouter.init(this);
}
}
================================================
FILE: animations/src/main/java/me/shouheng/animations/reveal/CircleRevealActivity.java
================================================
package me.shouheng.animations.reveal;
import android.animation.Animator;
import android.os.Bundle;
import android.view.animation.AccelerateDecelerateInterpolator;
import com.alibaba.android.arouter.facade.annotation.Route;
import io.codetail.animation.ViewAnimationUtils;
import me.shouheng.animations.R;
import me.shouheng.animations.databinding.ActivityCircleRevealBinding;
import me.shouheng.commons.config.BaseConstants;
import me.shouheng.commons.view.activity.CommonActivity;
@Route(path = BaseConstants.ANIMATIONS_CIRCLE_REVEAL)
public class CircleRevealActivity extends CommonActivity<ActivityCircleRevealBinding> {
@Override
protected int getLayoutResId() {
return R.layout.activity_circle_reveal;
}
@Override
protected void doCreateView(Bundle savedInstanceState) {
getBinding().btn1.setOnClickListener(v -> animate());
}
private void animate() {
int cx = (getBinding().vTop.getLeft() + getBinding().vTop.getRight()) / 2;
int cy = (getBinding().vTop.getTop() + getBinding().vTop.getBottom()) / 2;
// get the final radius for the clipping circle
int dx = Math.max(cx, getBinding().vTop.getWidth() - cx);
int dy = Math.max(cy, getBinding().vTop.getHeight() - cy);
float finalRadius = (float) Math.hypot(dx, dy);
// Android native animator
Animator animator = ViewAnimationUtils.createCircularReveal(getBinding().vTop, cx, cy, 0, finalRadius);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(1500);
animator.start();
}
}
================================================
FILE: animations/src/main/res/drawable/drawable_bitmap.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<bitmap android:src="@drawable/ic_launcher"
android:filter="true"
xmlns:android="http://schemas.android.com/apk/res/android">
</bitmap>
================================================
FILE: animations/src/main/res/drawable/drawable_bitmap_no_filter.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<bitmap android:src="@drawable/ic_launcher"
android:tileMode="mirror"
xmlns:android="http://schemas.android.com/apk/res/android">
</bitmap>
================================================
FILE: animations/src/main/res/drawable/drawable_layer.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
</layer-list>
================================================
FILE: animations/src/main/res/drawable/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillColor="#26A69A"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
</vector>
================================================
FILE: animations/src/main/res/drawable-v24/ic_launcher_foreground.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>
================================================
FILE: animations/src/main/res/layout/activity_anim.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<LinearLayout
android:fitsSystemWindows="true"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_reveal"
android:text="Circle Reveal Demo"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_toast"
android:text="Toast with icon"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_ripple"
android:text="Ripple Test"
android:textSize="32sp"
android:gravity="center"
android:textColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_ripple2"
android:text="Ripple Test 2"
android:textSize="32sp"
android:gravity="center"
android:textColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/tv_drawable"
android:text="Drawable Activity"
android:textSize="32sp"
android:gravity="center"
android:textColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
================================================
FILE: animations/src/main/res/layout/activity_circle_reveal.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".reveal.CircleRevealActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<io.codetail.widget.RevealFrameLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
<View android:id="@+id/v_top"
android:background="@android:color/holo_green_light"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</io.codetail.widget.RevealFrameLayout>
<io.codetail.widget.RevealLinearLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
<View android:id="@+id/v_bottom"
android:background="@android:color/holo_red_light"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</io.codetail.widget.RevealLinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_centerVertical="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn1"
android:text="BUTTON1"
android:layout_width="wrap_content"
android:layout_height="60dp" />
</LinearLayout>
</RelativeLayout>
</layout>
================================================
FILE: animations/src/main/res/layout/activity_drawable.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<androidx.core.widget.NestedScrollView
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="BitmapDrawable"
android:layout_margin="10dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="150dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<View
android:background="@drawable/drawable_bitmap"
android:layout_width="150dp"
android:layout_height="150dp"/>
<View
android:background="@drawable/drawable_bitmap_no_filter"
android:layout_width="150dp"
android:layout_height="150dp"/>
</LinearLayout>
</HorizontalScrollView>
<TextView
android:text="ShapeDrawable"
android:layout_margin="10dp"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:textSize="12sp"
android:text="参考:https://github.com/duanhong169/GradientDrawableTuner"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</layout>
================================================
FILE: animations/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
================================================
FILE: animations/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
================================================
FILE: animations/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">animations</string>
</resources>
================================================
FILE: animations/src/main/res/values/styles.xml
================================================
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorAccent</item>
<item name="colorPrimaryDark">#0068db</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
================================================
FILE: animations/src/test/java/me/shouheng/animations/ExampleUnitTest.java
================================================
package me.shouheng.animations;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
================================================
FILE: client/.gitignore
================================================
# Built application files
*.apk
*.ap_
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
# Gradle files
.gradle/
build/
.idea
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/dictionaries
.idea/libraries
# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
#*.jks
# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
# Google Services (e.g. APIs or Firebase)
google-services.json
# Freeline
freeline.py
freeline/
freeline_project_description.json
================================================
FILE: client/app/.gitignore
================================================
/build
================================================
FILE: client/app/build.gradle
================================================
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'walle'
apply plugin: 'AndResGuard'
apply plugin: 'com.getkeepsafe.dexcount'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "me.shouheng.references"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
// enable multi dex
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
ndk {
// 只保留 armeabi 和 armeabi-v7a 架构的 so 库,推送中有 so 库,容易导致 UnsatisfiedLinkError
abiFilters 'armeabi', 'armeabi-v7a'
}
}
signingConfigs {
release {
keyAlias 'key0'
storeFile file('../palm.jks')
storePassword '123456'
keyPassword '123456'
}
debug { }
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false // minify
shrinkResources false // enable shrink resources
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
// config released apk name
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = defaultConfig.applicationId + "-" + variant.baseName + "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk"
}
}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
// config release types
flavorDimensions "default"
productFlavors {
alpha {
dimension "default"
}
beta {
dimension "default"
}
prod {
dimension "default"
}
}
// use data binding
dataBinding {
enabled = true
}
// use java 8 language
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// use external libs folder
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
dexOptions {
jumboMode = true
}
// walle
walle {
apkOutputFolder = new File("${project.buildDir}/outputs/channels")
apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk'
channelFile = new File("${project.getProjectDir()}/channel")
}
// andResGuard
andResGuard {
mappingFile = null
use7zip = true
useSign = true
keepRoot = false
whiteList = [
// for fabric
"R.string.com.crashlytics.*",
// for google-services
"R.string.google_app_id",
"R.string.gcm_defaultSenderId",
"R.string.default_web_client_id",
"R.string.ga_trackingId",
"R.string.firebase_database_url",
"R.string.google_api_key",
"R.string.google_crash_reporting_api_key"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.13'
}
}
// dex count
dexcount {
format = "list"
includeClasses = false
includeClassCount = false
includeFieldCount = true
includeTotalMethodCount = false
orderByMethodCount = false
verbose = false
maxTreeDepth = Integer.MAX_VALUE
teamCityIntegration = false
teamCitySlug = null
runOnEachPackage = true
// maxMethodCount = 64000
enabled = true
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
// app intro
implementation 'com.github.paolorotolo:appintro:1.3.0'
// material drawer
implementation "com.mikepenz:materialdrawer:6.1.1"
// awesome fonts and icons
implementation 'com.mikepenz:google-material-typeface:3.0.1.2.original@aar'
implementation 'com.mikepenz:fontawesome-typeface:5.0.13.0@aar'
// router
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
// projects
if (!isGuokrModuleApp.toBoolean()) {
implementation project(':guokr')
}
if (!isLiveModuleApp.toBoolean()) {
implementation project(':live')
}
if (!isLayoutModuleApp.toBoolean()) {
implementation project(':layout')
}
if (!isLibraryModuleApp.toBoolean()) {
implementation project(':libraries')
}
if (!isEyepetizerModuleApp.toBoolean()) {
implementation project(':eyepetizer')
}
if (!isAdvancedModuleApp.toBoolean()) {
implementation project(':advanced')
}
if (!isAnimationsModuleApp.toBoolean()) {
implementation project(':animations')
}
implementation project(':commons')
}
================================================
FILE: client/app/channel
================================================
meituan # 美团
samsungapps #三星
hiapk
anzhi
xiaomi # 小米
91com
gfan
appchina
nduoa
3gcn
mumayi
10086com
wostore
189store
lenovomm
hicloud
meizu
wandou
# Google Play
# googleplay
# 百度
baidu
#
# 360
360cn
#
# 应用宝
myapp
================================================
FILE: client/app/fabric.properties
================================================
#Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public.
#Wed Jun 06 19:20:45 CST 2018
apiSecret=e4664a037aa796ecf2f8c00b5160724ef5056a17cd29ee650f42b1bc0bc067e6
================================================
FILE: client/app/gradle/wrapper/gradle-wrapper.properties
================================================
#Wed Jun 06 19:41:09 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
================================================
FILE: client/app/gradlew
================================================
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
================================================
FILE: client/app/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: client/app/proguard-rules.pro
================================================
#指定压缩级别
-optimizationpasses 5
#不跳过非公共的库的类成员
-dontskipnonpubliclibraryclassmembers
-dontskipnonpubliclibraryclasses
#混淆时采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#把混淆类中的方法名也混淆了
-useuniqueclassmembernames
#优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification
#将文件来源重命名为“SourceFile”字符串
-renamesourcefileattribute SourceFile
#保留行号
-keepattributes SourceFile,LineNumberTable
# 是否使用大小写混合
-dontusemixedcaseclassnames
#混淆时是否记录日志
-verbose
#忽略警告,避免打包时某些警告出现
-ignorewarnings
#预校验
-dontpreverify
#保护注解
-keepattributes *Annotation*
#保护JS回调接口
-keepattributes *JavascriptInterface*
#保留JavascriptInterface中的方法
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
#记录生成的日志数据,gradle build时在本项目根目录输出
#apk 包内所有 class 的内部结构
-dump class_files.txt
#未混淆的类和成员
-printseeds seeds.txt
#列出从 apk 中删除的代码
-printusage unused.txt
#混淆前后的映射
-printmapping mapping.txt
#保持所有实现 Serializable 接口的类成员
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# 保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# 保持枚举 enum 类不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
#Fragment不需要在AndroidManifest.xml中注册,需要额外保护下
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
#Social Style Date and Time Formatting for Java
-keep class org.ocpsoft.prettytime.i18n.**
#如果有引用v4、v7包可以添加下面这行
-keep public class * extends android.support.*
#解决ActionBar上面的搜索按钮的空指针问题
-keep class android.support.v7.widget.SearchView { *; }
#过滤泛型
-keepattributes Signature
# 保持测试相关的代码
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**
# proguard rules for rx-java
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
-dontwarn sun.misc.Unsafe
# Umeng 混淆配置
-keep class com.umeng.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
# Retrofit 混淆配置
-dontnote retrofit2.Platform
-dontnote retrofit2.Platform$IOS$MainThreadExecutor
-dontwarn retrofit2.Platform$Java8
-keepattributes Signature
-keepattributes Exceptions
# okhttp 混淆配置
-dontwarn okio.**
# Gson 混淆配置
# TODO 自定义数据模型的bean目录,如果使用了 Retrofit,必须增加该配置
# SwipeRecyclerView
-keepclasseswithmembers class android.support.v7.widget.RecyclerView$ViewHolder {
public final View *;
}
-dontwarn com.yanzhenjie.recyclerview.swipe.**
-keep class com.yanzhenjie.recyclerview.swipe.** {*;}
# 弹出菜单不混淆,需要反射调用其中的字段
-keep class android.support.v7.widget.PopupMenu { *; }
# Glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
# sensor
-dontwarn com.sensorsdata.analytics.android.**
-keep class com.sensorsdata.analytics.android.** {
*;
}
-keep class **.R$* {
<fields>;
}
-keepnames class * implements android.view.View$OnClickListener
-keep public class * extends android.content.ContentProvider
-keepnames class * extends android.view.View
-keep class * extends android.app.Fragment {
public void setUserVisibleHint(boolean);
public void onHiddenChanged(boolean);
public void onResume();
public void onPause();
}
-keep class android.support.v4.app.Fragment {
public void setUserVisibleHint(boolean);
public void onHiddenChanged(boolean);
public void onResume();
public void onPause();
}
-keep class * extends android.support.v4.app.Fragment {
public void setUserVisibleHint(boolean);
public void onHiddenChanged(boolean);
public void onResume();
public void onPause();
}
# DataBinding
-dontwarn android.databinding.**
-keep class android.databinding.** { *; }
# TODO 保持 databinding 目录
# MultiDex
-keep class com.sensorsdata.analytics.android.** { *; }
================================================
FILE: client/app/src/androidTest/java/me/shouheng/references/ExampleInstrumentedTest.java
================================================
package me.shouheng.references;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("me.shouheng.references", appContext.getPackageName());
}
}
================================================
FILE: client/app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.shouheng.references">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".view.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<activity android:name=".view.intro.AppIntroActivity" />
<!-- uemng -->
<meta-data android:value="5b62ef2df43e4841b70003cb" android:name="UMENG_APPKEY"/>
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
<meta-data
android:name="io.fabric.ApiKey"
android:value="aa14224ea2102fef301d211dac552635f37b1f9e" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="me.shouheng.references.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
</application>
</manifest>
================================================
FILE: client/app/src/main/assets/guokr.articleInline.js
================================================
(function(){define("ga",{setGa:function(){(function(e,t,n,r,i,s,o){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].l=1*new Date,s=t.createElement(n),o=t.getElementsByTagName(n)[0],s.async=1,s.src=r,o.parentNode.insertBefore(s,o)})(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-19521615-1","guokr.com"),ga("send","pageview")}}),define("tmpl",[],function(){function e(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}var t={entities:e};return function(n,r){/\W/.test(n)||(n=document.getElementById(n).innerHTML);var i=new Function("funcs, obj","var p=[],print=function(){p.push.apply(p,arguments);};with(funcs){with(obj){p.push('"+n.replace(/[\r\t\n]/g," ").split("<%").join(" ").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',entities($1),'").replace(/\t:=(.*?)%>/g,"',$1,'").split(" ").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}}return p.join('');");return r?i(t,r):function(e){return i(t,e)}}}),require(["ga","tmpl"],function(e,t){function n(){var e;if(typeof GuokrBridge=="undefined")return;e=JSON.parse(GuokrBridge.getRecommendArticles());if(e&&e.length){var n=document.getElementById("relaTmpl").innerHTML,r=t(n,{articles:e});document.getElementById("relaListWrap").innerHTML=r}}(function(e){e.fn.scrollLoading=function(t){var n={attr:"data-src"},r=e.extend({},n,t||{});r.cache=[],e(this).each(function(){var t=this.nodeName.toLowerCase(),n=e(this).attr(r.attr);if(!n)return;var i={obj:e(this),tag:t,url:n};r.cache.push(i)});var i=function(){var t=e(window).scrollTop(),n=t+e(window).height();return e.each(r.cache,function(e,r){var i=r.obj,s=r.tag,o=r.url;if(i){post=i.position().top,posb=post+i.height();if(post>t&&post<n||posb>t&&posb<n)s==="img"?i.attr("src",o):i.load(o),r.obj=null}}),!1};i(),e(window).bind("scroll",i)}})(jQuery),$("#articleContent img").scrollLoading(),$("#articleContent img").each(function(){var e=$(this),t=e.attr("width"),n=e.attr("height");e.load(function(){e.removeClass("load")}),t&&n&&document.body.clientWidth<768&&(e.width("100%"),n=n/t*e.width(),e.height(n)),e.addClass("load").css("opacity",1)}),e.setGa(),$("#relaListWrap").delegate("a[data-id]","click",function(e){e.preventDefault();var t=$(this),n=t.data("id");typeof GuokrBridge!="undefined"&&GuokrBridge.onRecommendArticleClick(n)}),window.renderRela=n,window.openNightMode=function(){$("#contentMain").addClass("night-mode")},window.closeNightMode=function(){$("#contentMain").removeClass("night-mode")},document.body.addEventListener("touchstart",function(){})}),define("articleInline",function(){})})();
================================================
FILE: client/app/src/main/assets/guokr.base.js
================================================
!function(a,b){function c(a){var b=a.length,c=fa.type(a);return fa.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||"function"!==c&&(0===b||"number"==typeof b&&b>0&&b-1 in a)}function d(a){var b=oa[a]={};return fa.each(a.match(ha)||[],function(a,c){b[c]=!0}),b}function e(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=fa.expando+Math.random()}function f(a,c,d){var e;if(d===b&&1===a.nodeType)if(e="data-"+c.replace(sa,"-$1").toLowerCase(),d=a.getAttribute(e),"string"==typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:+d+""===d?+d:ra.test(d)?JSON.parse(d):d}catch(f){}pa.set(a,c,d)}else d=b;return d}function g(){return!0}function h(){return!1}function i(){try{return T.activeElement}catch(a){}}function j(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function k(a,b,c){if(fa.isFunction(b))return fa.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return fa.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(Ca.test(b))return fa.filter(b,a,c);b=fa.filter(b,a)}return fa.grep(a,function(a){return ba.call(b,a)>=0!==c})}function l(a,b){return fa.nodeName(a,"table")&&fa.nodeName(1===b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function m(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function n(a){var b=Na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function o(a,b){for(var c=a.length,d=0;c>d;d++)qa.set(a[d],"globalEval",!b||qa.get(b[d],"globalEval"))}function p(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(qa.hasData(a)&&(f=qa.access(a),g=qa.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)fa.event.add(b,e,j[e][c])}pa.hasData(a)&&(h=pa.access(a),i=fa.extend({},h),pa.set(b,i))}}function q(a,c){var d=a.getElementsByTagName?a.getElementsByTagName(c||"*"):a.querySelectorAll?a.querySelectorAll(c||"*"):[];return c===b||c&&fa.nodeName(a,c)?fa.merge([a],d):d}function r(a,b){var c=b.nodeName.toLowerCase();"input"===c&&Ka.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function s(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=_a.length;e--;)if(b=_a[e]+c,b in a)return b;return d}function t(a,b){return a=b||a,"none"===fa.css(a,"display")||!fa.contains(a.ownerDocument,a)}function u(b){return a.getComputedStyle(b,null)}function v(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=qa.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&t(d)&&(f[g]=qa.access(d,"olddisplay",z(d.nodeName)))):f[g]||(e=t(d),(c&&"none"!==c||!e)&&qa.set(d,"olddisplay",e?c:fa.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function w(a,b,c){var d=Ua.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function x(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=fa.css(a,c+$a[f],!0,e)),d?("content"===c&&(g-=fa.css(a,"padding"+$a[f],!0,e)),"margin"!==c&&(g-=fa.css(a,"border"+$a[f]+"Width",!0,e))):(g+=fa.css(a,"padding"+$a[f],!0,e),"padding"!==c&&(g+=fa.css(a,"border"+$a[f]+"Width",!0,e)));return g}function y(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=u(a),g=fa.support.boxSizing&&"border-box"===fa.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Qa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Va.test(e))return e;d=g&&(fa.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+x(a,b,c||(g?"border":"content"),d,f)+"px"}function z(a){var b=T,c=Xa[a];return c||(c=A(a,b),"none"!==c&&c||(Ra=(Ra||fa("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(b.documentElement),b=(Ra[0].contentWindow||Ra[0].contentDocument).document,b.write("<!doctype html><html><body>"),b.close(),c=A(a,b),Ra.detach()),Xa[a]=c),c}function A(a,b){var c=fa(b.createElement(a)).appendTo(b.body),d=fa.css(c[0],"display");return c.remove(),d}function B(a,b,c,d){var e;if(fa.isArray(b))fa.each(b,function(b,e){c||bb.test(a)?d(a,e):B(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==fa.type(b))d(a,b);else for(e in b)B(a+"["+e+"]",b[e],c,d)}function C(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(ha)||[];if(fa.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function D(a,b,c,d){function e(h){var i;return f[h]=!0,fa.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===sb;return e(b.dataTypes[0])||!f["*"]&&e("*")}function E(a,c){var d,e,f=fa.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);return e&&fa.extend(!0,a,e),a}function F(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;"*"===j[0];)j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("Content-Type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}return g?(g!==j[0]&&j.unshift(g),d[g]):void 0}function G(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}function H(){return setTimeout(function(){Bb=b}),Bb=fa.now()}function I(a,b,c){for(var d,e=(Hb[b]||[]).concat(Hb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function J(a,b,c){var d,e,f=0,g=Gb.length,h=fa.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Bb||H(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:fa.extend({},b),opts:fa.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Bb||H(),duration:c.duration,tweens:[],createTween:function(b,c){var d=fa.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(K(k,j.opts.specialEasing);g>f;f++)if(d=Gb[f].call(j,a,k,j.opts))return d;return fa.map(k,I,j),fa.isFunction(j.opts.start)&&j.opts.start.call(a,j),fa.fx.timer(fa.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function K(a,b){var c,d,e,f,g;for(c in a)if(d=fa.camelCase(c),e=b[d],f=a[c],fa.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=fa.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function L(a,c,d){var e,f,g,h,i,j,k=this,l={},m=a.style,n=a.nodeType&&t(a),o=qa.get(a,"fxshow");d.queue||(i=fa._queueHooks(a,"fx"),null==i.unqueued&&(i.unqueued=0,j=i.empty.fire,i.empty.fire=function(){i.unqueued||j()}),i.unqueued++,k.always(function(){k.always(function(){i.unqueued--,fa.queue(a,"fx").length||i.empty.fire()})})),1===a.nodeType&&("height"in c||"width"in c)&&(d.overflow=[m.overflow,m.overflowX,m.overflowY],"inline"===fa.css(a,"display")&&"none"===fa.css(a,"float")&&(m.display="inline-block")),d.overflow&&(m.overflow="hidden",k.always(function(){m.overflow=d.overflow[0],m.overflowX=d.overflow[1],m.overflowY=d.overflow[2]}));for(e in c)if(f=c[e],Db.exec(f)){if(delete c[e],g=g||"toggle"===f,f===(n?"hide":"show")){if("show"!==f||!o||o[e]===b)continue;n=!0}l[e]=o&&o[e]||fa.style(a,e)}if(!fa.isEmptyObject(l)){o?"hidden"in o&&(n=o.hidden):o=qa.access(a,"fxshow",{}),g&&(o.hidden=!n),n?fa(a).show():k.done(function(){fa(a).hide()}),k.done(function(){var b;qa.remove(a,"fxshow");for(b in l)fa.style(a,b,l[b])});for(e in l)h=I(n?o[e]:0,e,k),e in o||(o[e]=h.start,n&&(h.end=h.start,h.start="width"===e||"height"===e?1:0))}}function M(a,b,c,d,e){return new M.prototype.init(a,b,c,d,e)}function N(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=$a[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function O(a){return fa.isWindow(a)?a:9===a.nodeType&&a.defaultView}var P,Q,R=typeof b,S=a.location,T=a.document,U=T.documentElement,V=a.jQuery,W=a.$,X={},Y=[],Z="2.0.3",$=Y.concat,_=Y.push,aa=Y.slice,ba=Y.indexOf,ca=X.toString,da=X.hasOwnProperty,ea=Z.trim,fa=function(a,b){return new fa.fn.init(a,b,P)},ga=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ha=/\S+/g,ia=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ja=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ka=/^-ms-/,la=/-([\da-z])/gi,ma=function(a,b){return b.toUpperCase()},na=function(){T.removeEventListener("DOMContentLoaded",na,!1),a.removeEventListener("load",na,!1),fa.ready()};fa.fn=fa.prototype={jquery:Z,constructor:fa,init:function(a,c,d){var e,f;if(!a)return this;if("string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:ia.exec(a),!e||!e[1]&&c)return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a);if(e[1]){if(c=c instanceof fa?c[0]:c,fa.merge(this,fa.parseHTML(e[1],c&&c.nodeType?c.ownerDocument||c:T,!0)),ja.test(e[1])&&fa.isPlainObject(c))for(e in c)fa.isFunction(this[e])?this[e](c[e]):this.attr(e,c[e]);return this}return f=T.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=T,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):fa.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),fa.makeArray(a,this))},selector:"",length:0,toArray:function(){return aa.call(this)},get:function(a){return null==a?this.toArray():0>a?this[this.length+a]:this[a]},pushStack:function(a){var b=fa.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return fa.each(this,a,b)},ready:function(a){return fa.ready.promise().done(a),this},slice:function(){return this.pushStack(aa.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},map:function(a){return this.pushStack(fa.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:_,sort:[].sort,splice:[].splice},fa.fn.init.prototype=fa.fn,fa.extend=fa.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),"object"==typeof h||fa.isFunction(h)||(h={}),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(c in a)d=h[c],e=a[c],h!==e&&(k&&e&&(fa.isPlainObject(e)||(f=fa.isArray(e)))?(f?(f=!1,g=d&&fa.isArray(d)?d:[]):g=d&&fa.isPlainObject(d)?d:{},h[c]=fa.extend(k,g,e)):e!==b&&(h[c]=e));return h},fa.extend({expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),noConflict:function(b){return a.$===fa&&(a.$=W),b&&a.jQuery===fa&&(a.jQuery=V),fa},isReady:!1,readyWait:1,holdReady:function(a){a?fa.readyWait++:fa.ready(!0)},ready:function(a){(a===!0?--fa.readyWait:fa.isReady)||(fa.isReady=!0,a!==!0&&--fa.readyWait>0||(Q.resolveWith(T,[fa]),fa.fn.trigger&&fa(T).trigger("ready").off("ready")))},isFunction:function(a){return"function"===fa.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return null==a?String(a):"object"==typeof a||"function"==typeof a?X[ca.call(a)]||"object":typeof a},isPlainObject:function(a){if("object"!==fa.type(a)||a.nodeType||fa.isWindow(a))return!1;try{if(a.constructor&&!da.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||T;var d=ja.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=fa.buildFragment([a],b,e),e&&fa(e).remove(),fa.merge([],d.childNodes))},parseJSON:JSON.parse,parseXML:function(a){var c,d;if(!a||"string"!=typeof a)return null;try{d=new DOMParser,c=d.parseFromString(a,"text/xml")}catch(e){c=b}return(!c||c.getElementsByTagName("parsererror").length)&&fa.error("Invalid XML: "+a),c},noop:function(){},globalEval:function(a){var b,c=eval;a=fa.trim(a),a&&(1===a.indexOf("use strict")?(b=T.createElement("script"),b.text=a,T.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(ka,"ms-").replace(la,ma)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:function(a){return null==a?"":ea.call(a)},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?fa.merge(d,"string"==typeof a?[a]:a):_.call(d,a)),d},inArray:function(a,b,c){return null==b?-1:ba.call(b,a,c)},merge:function(a,c){var d=c.length,e=a.length,f=0;if("number"==typeof d)for(;d>f;f++)a[e++]=c[f];else for(;c[f]!==b;)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;for(c=!!c;g>f;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&(i[i.length]=e);else for(f in a)e=b(a[f],f,d),null!=e&&(i[i.length]=e);return $.apply([],i)},guid:1,proxy:function(a,c){var d,e,f;return"string"==typeof c&&(d=a[c],c=a,a=d),fa.isFunction(a)?(e=aa.call(arguments,2),f=function(){return a.apply(c||this,e.concat(aa.call(arguments)))},f.guid=a.guid=a.guid||fa.guid++,f):b},access:function(a,c,d,e,f,g,h){var i=0,j=a.length,k=null==d;if("object"===fa.type(d)){f=!0;for(i in d)fa.access(a,c,i,d[i],!0,g,h)}else if(e!==b&&(f=!0,fa.isFunction(e)||(h=!0),k&&(h?(c.call(a,e),c=null):(k=c,c=function(a,b,c){return k.call(fa(a),c)})),c))for(;j>i;i++)c(a[i],d,h?e:e.call(a[i],i,c(a[i],d)));return f?a:k?c.call(a):j?c(a[0],d):g},now:Date.now,swap:function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e}}),fa.ready.promise=function(b){return Q||(Q=fa.Deferred(),"complete"===T.readyState?setTimeout(fa.ready):(T.addEventListener("DOMContentLoaded",na,!1),a.addEventListener("load",na,!1))),Q.promise(b)},fa.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){X["[object "+b+"]"]=b.toLowerCase()}),P=fa(T),function(a,b){function c(a,b,c,d){var e,f,g,h,i,j,k,l,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],!a||"string"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(I&&!d){if(e=ta.exec(a))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return aa.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&x.getElementsByClassName&&b.getElementsByClassName)return aa.apply(c,b.getElementsByClassName(g)),c}if(x.qsa&&(!J||!J.test(a))){if(l=k=N,o=b,p=9===h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){for(j=m(a),(k=b.getAttribute("id"))?l=k.replace(wa,"\\$&"):b.setAttribute("id",l),l="[id='"+l+"'] ",i=j.length;i--;)j[i]=l+n(j[i]);o=na.test(a)&&b.parentNode||b,p=j.join(",")}if(p)try{return aa.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{k||b.removeAttribute("id")}}}return v(a.replace(ka,"$1"),b,c,d)}function d(){function a(c,d){return b.push(c+=" ")>z.cacheLength&&delete a[b.shift()],a[c]=d}var b=[];return a}function e(a){return a[N]=!0,a}function f(a){var b=G.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function g(a,b){for(var c=a.split("|"),d=a.length;d--;)z.attrHandle[c[d]]=b}function h(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||X)-(~a.sourceIndex||X);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function i(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function j(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function k(a){return e(function(b){return b=+b,e(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function l(){}function m(a,b){var d,e,f,g,h,i,j,k=S[a+" "];if(k)return b?0:k.slice(0);for(h=a,i=[],j=z.preFilter;h;){(!d||(e=la.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ma.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ka," ")}),h=h.slice(d.length));for(g in z.filter)!(e=ra[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return b?h.length:h?c.error(a):S(a,i).slice(0)}function n(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function o(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=P+" "+f;if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e)if(j=b[N]||(b[N]={}),(i=j[d])&&i[0]===k){if((h=i[1])===!0||h===y)return h===!0}else if(i=j[d]=[k],i[1]=a(b,c,g)||y,i[1]===!0)return!0}}function p(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,d,f,g){return d&&!d[N]&&(d=r(d)),f&&!f[N]&&(f=r(f,g)),e(function(e,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=e||u(b||"*",h.nodeType?[h]:h,[]),r=!a||!e&&b?p:q(p,m,a,h,i),s=c?f||(e?a:o||d)?[]:g:r;if(c&&c(r,s,h,i),d)for(j=q(s,n),d(j,[],h,i),k=j.length;k--;)(l=j[k])&&(s[n[k]]=!(r[n[k]]=l));if(e){if(f||a){if(f){for(j=[],k=s.length;k--;)(l=s[k])&&j.push(r[k]=l);f(null,s=[],j,i)}for(k=s.length;k--;)(l=s[k])&&(j=f?ca.call(e,l):m[k])>-1&&(e[j]=!(g[j]=l))}}else s=q(s===g?s.splice(o,s.length):s),f?f(null,g,s,i):aa.apply(g,s)})}function s(a){for(var b,c,d,e=a.length,f=z.relative[a[0].type],g=f||z.relative[" "],h=f?1:0,i=o(function(a){return a===b},g,!0),j=o(function(a){return ca.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==D)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];e>h;h++)if(c=z.relative[a[h].type])k=[o(p(k),c)];else{if(c=z.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!z.relative[a[d].type];d++);return r(h>1&&p(k),h>1&&n(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ka,"$1"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&n(a))}k.push(c)}return p(k)}function t(a,b){var d=0,f=b.length>0,g=a.length>0,h=function(e,h,i,j,k){var l,m,n,o=[],p=0,r="0",s=e&&[],t=null!=k,u=D,v=e||g&&z.find.TAG("*",k&&h.parentNode||h),w=P+=null==u?1:Math.random()||.1;for(t&&(D=h!==G&&h,y=d);null!=(l=v[r]);r++){if(g&&l){for(m=0;n=a[m++];)if(n(l,h,i)){j.push(l);break}t&&(P=w,y=++d)}f&&((l=!n&&l)&&p--,e&&s.push(l))}if(p+=r,f&&r!==p){for(m=0;n=b[m++];)n(s,o,h,i);if(e){if(p>0)for(;r--;)s[r]||o[r]||(o[r]=$.call(j));o=q(o)}aa.apply(j,o),t&&!e&&o.length>0&&p+b.length>1&&c.uniqueSort(j)}return t&&(P=w,D=u),s};return f?e(h):h}function u(a,b,d){for(var e=0,f=b.length;f>e;e++)c(a,b[e],d);return d}function v(a,b,c,d){var e,f,g,h,i,j=m(a);if(!d&&1===j.length){if(f=j[0]=j[0].slice(0),f.length>2&&"ID"===(g=f[0]).type&&x.getById&&9===b.nodeType&&I&&z.relative[f[1].type]){if(b=(z.find.ID(g.matches[0].replace(xa,ya),b)||[])[0],!b)return c;a=a.slice(f.shift().value.length)}for(e=ra.needsContext.test(a)?0:f.length;e--&&(g=f[e],!z.relative[h=g.type]);)if((i=z.find[h])&&(d=i(g.matches[0].replace(xa,ya),na.test(f[0].type)&&b.parentNode||b))){if(f.splice(e,1),a=d.length&&n(f),!a)return aa.apply(c,d),c;break}}return C(a,j)(d,b,!I,c,na.test(a)),c}var w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+-new Date,O=a.document,P=0,Q=0,R=d(),S=d(),T=d(),U=!1,V=function(a,b){return a===b?(U=!0,0):0},W=typeof b,X=1<<31,Y={}.hasOwnProperty,Z=[],$=Z.pop,_=Z.push,aa=Z.push,ba=Z.slice,ca=Z.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},da="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ea="[\\x20\\t\\r\\n\\f]",ga="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ha=ga.replace("w","w#"),ia="\\["+ea+"*("+ga+")"+ea+"*(?:([*^$|!~]?=)"+ea+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+ha+")|)|)"+ea+"*\\]",ja=":("+ga+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+ia.replace(3,8)+")*)|.*)\\)|)",ka=new RegExp("^"+ea+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ea+"+$","g"),la=new RegExp("^"+ea+"*,"+ea+"*"),ma=new RegExp("^"+ea+"*([>+~]|"+ea+")"+ea+"*"),na=new RegExp(ea+"*[+~]"),oa=new RegExp("="+ea+"*([^\\]'\"]*)"+ea+"*\\]","g"),pa=new RegExp(ja),qa=new RegExp("^"+ha+"$"),ra={ID:new RegExp("^#("+ga+")"),CLASS:new RegExp("^\\.("+ga+")"),TAG:new RegExp("^("+ga.replace("w","w*")+")"),ATTR:new RegExp("^"+ia),PSEUDO:new RegExp("^"+ja),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ea+"*(even|odd|(([+-]|)(\\d*)n|)"+ea+"*(?:([+-]|)"+ea+"*(\\d+)|))"+ea+"*\\)|)","i"),bool:new RegExp("^(?:"+da+")$","i"),needsContext:new RegExp("^"+ea+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ea+"*((?:-\\d)?\\d*)"+ea+"*\\)|)(?=[^-]|$)","i")},sa=/^[^{]+\{\s*\[native \w/,ta=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ua=/^(?:input|select|textarea|button)$/i,va=/^h\d$/i,wa=/'|\\/g,xa=new RegExp("\\\\([\\da-f]{1,6}"+ea+"?|("+ea+")|.)","ig"),ya=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{aa.apply(Z=ba.call(O.childNodes),O.childNodes),Z[O.childNodes.length].nodeType}catch(za){aa={apply:Z.length?function(a,b){_.apply(a,ba.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}B=c.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},x=c.support={},F=c.setDocument=function(a){var b=a?a.ownerDocument||a:O,c=b.defaultView;return b!==G&&9===b.nodeType&&b.documentElement?(G=b,H=b.documentElement,I=!B(b),c&&c.attachEvent&&c!==c.top&&c.attachEvent("onbeforeunload",function(){F()}),x.attributes=f(function(a){return a.className="i",!a.getAttribute("className")}),x.getElementsByTagName=f(function(a){return a.appendChild(b.createComment("")),!a.getElementsByTagName("*").length}),x.getElementsByClassName=f(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),x.getById=f(function(a){return H.appendChild(a).id=N,!b.getElementsByName||!b.getElementsByName(N).length}),x.getById?(z.find.ID=function(a,b){if(typeof b.getElementById!==W&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){return a.getAttribute("id")===b}}):(delete z.find.ID,z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){var c=typeof a.getAttributeNode!==W&&a.getAttributeNode("id");return c&&c.value===b}}),z.find.TAG=x.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==W?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},z.find.CLASS=x.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==W&&I?b.getElementsByClassName(a):void 0},K=[],J=[],(x.qsa=sa.test(b.querySelectorAll))&&(f(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||J.push("\\["+ea+"*(?:value|"+da+")"),a.querySelectorAll(":checked").length||J.push(":checked")}),f(function(a){var c=b.createElement("input");c.setAttribute("type","hidden"),a.appendChild(c).setAttribute("t",""),a.querySelectorAll("[t^='']").length&&J.push("[*^$]="+ea+"*(?:''|\"\")"),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(x.matchesSelector=sa.test(L=H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&f(function(a){x.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",ja)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),M=sa.test(H.contains)||H.compareDocumentPosition?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},V=H.compareDocumentPosition?function(a,c){if(a===c)return U=!0,0;var d=c.compareDocumentPosition&&a.compareDocumentPosition&&a.compareDocumentPosition(c);return d?1&d||!x.sortDetached&&c.compareDocumentPosition(a)===d?a===b||M(O,a)?-1:c===b||M(O,c)?1:E?ca.call(E,a)-ca.call(E,c):0:4&d?-1:1:a.compareDocumentPosition?-1:1}:function(a,c){var d,e=0,f=a.parentNode,g=c.parentNode,i=[a],j=[c];if(a===c)return U=!0,0;if(!f||!g)return a===b?-1:c===b?1:f?-1:g?1:E?ca.call(E,a)-ca.call(E,c):0;if(f===g)return h(a,c);for(d=a;d=d.parentNode;)i.unshift(d);for(d=c;d=d.parentNode;)j.unshift(d);for(;i[e]===j[e];)e++;return e?h(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},b):G},c.matches=function(a,b){return c(a,null,null,b)},c.matchesSelector=function(a,b){if((a.ownerDocument||a)!==G&&F(a),b=b.replace(oa,"='$1']"),x.matchesSelector&&I&&(!K||!K.test(b))&&(!J||!J.test(b)))try{var d=L.call(a,b);if(d||x.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return c(b,G,null,[a]).length>0},c.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},c.attr=function(a,c){(a.ownerDocument||a)!==G&&F(a);var d=z.attrHandle[c.toLowerCase()],e=d&&Y.call(z.attrHandle,c.toLowerCase())?d(a,c,!I):b;return e===b?x.attributes||!I?a.getAttribute(c):(e=a.getAttributeNode(c))&&e.specified?e.value:null:e},c.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},c.uniqueSort=function(a){var b,c=[],d=0,e=0;if(U=!x.detectDuplicates,E=!x.sortStable&&a.slice(0),a.sort(V),U){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return a},A=c.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=A(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d];d++)c+=A(b);return c},z=c.selectors={cacheLength:50,createPseudo:e,match:ra,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(xa,ya),a[3]=(a[4]||a[5]||"").replace(xa,ya),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||c.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&c.error(a[0]),a},PSEUDO:function(a){var c,d=!a[5]&&a[2];return ra.CHILD.test(a[0])?null:(a[3]&&a[4]!==b?a[2]=a[4]:d&&pa.test(d)&&(c=m(d,!0))&&(c=d.indexOf(")",d.length-c)-d.length)&&(a[0]=a[0].slice(0,c),a[2]=d.slice(0,c)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(xa,ya).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+ea+")"+a+"("+ea+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==W&&a.getAttribute("class")||"")})},ATTR:function(a,b,d){return function(e){var f=c.attr(e,a);return null==f?"!="===b:b?(f+="","="===b?f===d:"!="===b?f!==d:"^="===b?d&&0===f.indexOf(d):"*="===b?d&&f.indexOf(d)>-1:"$="===b?d&&f.slice(-d.length)===d:"~="===b?(" "+f+" ").indexOf(d)>-1:"|="===b?f===d||f.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var d,f=z.pseudos[a]||z.setFilters[a.toLowerCase()]||c.error("unsupported pseudo: "+a);return f[N]?f(b):f.length>1?(d=[a,a,"",b],z.setFilters.hasOwnProperty(a.toLowerCase())?e(function(a,c){for(var d,e=f(a,b),g=e.length;g--;)d=ca.call(a,e[g]),a[d]=!(c[d]=e[g])}):function(a){return f(a,0,d)}):f}},pseudos:{not:e(function(a){var b=[],c=[],d=C(a.replace(ka,"$1"));return d[N]?e(function(a,b,c,e){for(var f,g=d(a,null,e,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:e(function(a){return function(b){return c(a,b).length>0}}),contains:e(function(a){return function(b){return(b.textContent||b.innerText||A(b)).indexOf(a)>-1}}),lang:e(function(a){return qa.test(a||"")||c.error("unsupported lang: "+a),a=a.replace(xa,ya).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeName>"@"||3===a.nodeType||4===a.nodeType)return!1;return!0},parent:function(a){return!z.pseudos.empty(a)},header:function(a){return va.test(a.nodeName)},input:function(a){return ua.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||b.toLowerCase()===a.type)},first:k(function(){return[0]}),last:k(function(a,b){return[b-1]}),eq:k(function(a,b,c){return[0>c?c+b:c]}),even:k(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:k(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:k(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:k(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},z.pseudos.nth=z.pseudos.eq;for(w in{
radio:!0,checkbox:!0,file:!0,password:!0,image:!0})z.pseudos[w]=i(w);for(w in{submit:!0,reset:!0})z.pseudos[w]=j(w);l.prototype=z.filters=z.pseudos,z.setFilters=new l,C=c.compile=function(a,b){var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=m(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d))}return f},x.sortStable=N.split("").sort(V).join("")===N,x.detectDuplicates=U,F(),x.sortDetached=f(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),f(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||g("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),x.attributes&&f(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||g("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),f(function(a){return null==a.getAttribute("disabled")})||g(da,function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&d.specified?d.value:a[b]===!0?b.toLowerCase():null}),fa.find=c,fa.expr=c.selectors,fa.expr[":"]=fa.expr.pseudos,fa.unique=c.uniqueSort,fa.text=c.getText,fa.isXMLDoc=c.isXML,fa.contains=c.contains}(a);var oa={};fa.Callbacks=function(a){a="string"==typeof a?oa[a]||d(a):fa.extend({},a);var c,e,f,g,h,i,j=[],k=!a.once&&[],l=function(b){for(c=a.memory&&b,e=!0,i=g||0,g=0,h=j.length,f=!0;j&&h>i;i++)if(j[i].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}f=!1,j&&(k?k.length&&l(k.shift()):c?j=[]:m.disable())},m={add:function(){if(j){var b=j.length;!function d(b){fa.each(b,function(b,c){var e=fa.type(c);"function"===e?a.unique&&m.has(c)||j.push(c):c&&c.length&&"string"!==e&&d(c)})}(arguments),f?h=j.length:c&&(g=b,l(c))}return this},remove:function(){return j&&fa.each(arguments,function(a,b){for(var c;(c=fa.inArray(b,j,c))>-1;)j.splice(c,1),f&&(h>=c&&h--,i>=c&&i--)}),this},has:function(a){return a?fa.inArray(a,j)>-1:!(!j||!j.length)},empty:function(){return j=[],h=0,this},disable:function(){return j=k=c=b,this},disabled:function(){return!j},lock:function(){return k=b,c||m.disable(),this},locked:function(){return!k},fireWith:function(a,b){return!j||e&&!k||(b=b||[],b=[a,b.slice?b.slice():b],f?k.push(b):l(b)),this},fire:function(){return m.fireWith(this,arguments),this},fired:function(){return!!e}};return m},fa.extend({Deferred:function(a){var b=[["resolve","done",fa.Callbacks("once memory"),"resolved"],["reject","fail",fa.Callbacks("once memory"),"rejected"],["notify","progress",fa.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return fa.Deferred(function(c){fa.each(b,function(b,f){var g=f[0],h=fa.isFunction(a[b])&&a[b];e[f[1]](function(){var a=h&&h.apply(this,arguments);a&&fa.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g+"With"](this===d?c.promise():this,h?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?fa.extend(a,d):d}},e={};return d.pipe=d.then,fa.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=aa.call(arguments),g=f.length,h=1!==g||a&&fa.isFunction(a.promise)?g:0,i=1===h?a:fa.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?aa.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&fa.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}}),fa.support=function(b){var c=T.createElement("input"),d=T.createDocumentFragment(),e=T.createElement("div"),f=T.createElement("select"),g=f.appendChild(T.createElement("option"));return c.type?(c.type="checkbox",b.checkOn=""!==c.value,b.optSelected=g.selected,b.reliableMarginRight=!0,b.boxSizingReliable=!0,b.pixelPosition=!1,c.checked=!0,b.noCloneChecked=c.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled,c=T.createElement("input"),c.value="t",c.type="radio",b.radioValue="t"===c.value,c.setAttribute("checked","t"),c.setAttribute("name","t"),d.appendChild(c),b.checkClone=d.cloneNode(!0).cloneNode(!0).lastChild.checked,b.focusinBubbles="onfocusin"in a,e.style.backgroundClip="content-box",e.cloneNode(!0).style.backgroundClip="",b.clearCloneStyle="content-box"===e.style.backgroundClip,fa(function(){var c,d,f="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",g=T.getElementsByTagName("body")[0];g&&(c=T.createElement("div"),c.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",g.appendChild(c).appendChild(e),e.innerHTML="",e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",fa.swap(g,null!=g.style.zoom?{zoom:1}:{},function(){b.boxSizing=4===e.offsetWidth}),a.getComputedStyle&&(b.pixelPosition="1%"!==(a.getComputedStyle(e,null)||{}).top,b.boxSizingReliable="4px"===(a.getComputedStyle(e,null)||{width:"4px"}).width,d=e.appendChild(T.createElement("div")),d.style.cssText=e.style.cssText=f,d.style.marginRight=d.style.width="0",e.style.width="1px",b.reliableMarginRight=!parseFloat((a.getComputedStyle(d,null)||{}).marginRight)),g.removeChild(c))}),b):b}({});var pa,qa,ra=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,sa=/([A-Z])/g;e.uid=1,e.accepts=function(a){return a.nodeType?1===a.nodeType||9===a.nodeType:!0},e.prototype={key:function(a){if(!e.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=e.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,fa.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(fa.isEmptyObject(f))fa.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,c){var d=this.cache[this.key(a)];return c===b?d:d[c]},access:function(a,c,d){var e;return c===b||c&&"string"==typeof c&&d===b?(e=this.get(a,c),e!==b?e:this.get(a,fa.camelCase(c))):(this.set(a,c,d),d!==b?d:c)},remove:function(a,c){var d,e,f,g=this.key(a),h=this.cache[g];if(c===b)this.cache[g]={};else{fa.isArray(c)?e=c.concat(c.map(fa.camelCase)):(f=fa.camelCase(c),c in h?e=[c,f]:(e=f,e=e in h?[e]:e.match(ha)||[])),d=e.length;for(;d--;)delete h[e[d]]}},hasData:function(a){return!fa.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}},pa=new e,qa=new e,fa.extend({acceptData:e.accepts,hasData:function(a){return pa.hasData(a)||qa.hasData(a)},data:function(a,b,c){return pa.access(a,b,c)},removeData:function(a,b){pa.remove(a,b)},_data:function(a,b,c){return qa.access(a,b,c)},_removeData:function(a,b){qa.remove(a,b)}}),fa.fn.extend({data:function(a,c){var d,e,g=this[0],h=0,i=null;if(a===b){if(this.length&&(i=pa.get(g),1===g.nodeType&&!qa.get(g,"hasDataAttrs"))){for(d=g.attributes;h<d.length;h++)e=d[h].name,0===e.indexOf("data-")&&(e=fa.camelCase(e.slice(5)),f(g,e,i[e]));qa.set(g,"hasDataAttrs",!0)}return i}return"object"==typeof a?this.each(function(){pa.set(this,a)}):fa.access(this,function(c){var d,e=fa.camelCase(a);if(g&&c===b){if(d=pa.get(g,a),d!==b)return d;if(d=pa.get(g,e),d!==b)return d;if(d=f(g,e,b),d!==b)return d}else this.each(function(){var d=pa.get(this,e);pa.set(this,e,c),-1!==a.indexOf("-")&&d!==b&&pa.set(this,a,c)})},null,c,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){pa.remove(this,a)})}}),fa.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=qa.get(a,b),c&&(!d||fa.isArray(c)?d=qa.access(a,b,fa.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=fa.queue(a,b),d=c.length,e=c.shift(),f=fa._queueHooks(a,b),g=function(){fa.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return qa.get(a,c)||qa.access(a,c,{empty:fa.Callbacks("once memory").add(function(){qa.remove(a,[b+"queue",c])})})}}),fa.fn.extend({queue:function(a,c){var d=2;return"string"!=typeof a&&(c=a,a="fx",d--),arguments.length<d?fa.queue(this[0],a):c===b?this:this.each(function(){var b=fa.queue(this,a,c);fa._queueHooks(this,a),"fx"===a&&"inprogress"!==b[0]&&fa.dequeue(this,a)})},dequeue:function(a){return this.each(function(){fa.dequeue(this,a)})},delay:function(a,b){return a=fa.fx?fa.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=fa.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};for("string"!=typeof a&&(c=a,a=b),a=a||"fx";h--;)d=qa.get(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var ta,ua,va=/[\t\r\n\f]/g,wa=/\r/g,xa=/^(?:input|select|textarea|button)$/i;fa.fn.extend({attr:function(a,b){return fa.access(this,fa.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){fa.removeAttr(this,a)})},prop:function(a,b){return fa.access(this,fa.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[fa.propFix[a]||a]})},addClass:function(a){var b,c,d,e,f,g=0,h=this.length,i="string"==typeof a&&a;if(fa.isFunction(a))return this.each(function(b){fa(this).addClass(a.call(this,b,this.className))});if(i)for(b=(a||"").match(ha)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(va," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");c.className=fa.trim(d)}return this},removeClass:function(a){var b,c,d,e,f,g=0,h=this.length,i=0===arguments.length||"string"==typeof a&&a;if(fa.isFunction(a))return this.each(function(b){fa(this).removeClass(a.call(this,b,this.className))});if(i)for(b=(a||"").match(ha)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(va," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");c.className=a?fa.trim(d):""}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):fa.isFunction(a)?this.each(function(c){fa(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if("string"===c)for(var b,d=0,e=fa(this),f=a.match(ha)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===R||"boolean"===c)&&(this.className&&qa.set(this,"__className__",this.className),this.className=this.className||a===!1?"":qa.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(va," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];{if(arguments.length)return e=fa.isFunction(a),this.each(function(d){var f;1===this.nodeType&&(f=e?a.call(this,d,fa(this).val()):a,null==f?f="":"number"==typeof f?f+="":fa.isArray(f)&&(f=fa.map(f,function(a){return null==a?"":a+""})),c=fa.valHooks[this.type]||fa.valHooks[this.nodeName.toLowerCase()],c&&"set"in c&&c.set(this,f,"value")!==b||(this.value=f))});if(f)return c=fa.valHooks[f.type]||fa.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,"string"==typeof d?d.replace(wa,""):null==d?"":d)}}}),fa.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(fa.support.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!fa.nodeName(c.parentNode,"optgroup"))){if(b=fa(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=fa.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=fa.inArray(fa(d).val(),f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}},attr:function(a,c,d){var e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return typeof a.getAttribute===R?fa.prop(a,c,d):(1===g&&fa.isXMLDoc(a)||(c=c.toLowerCase(),e=fa.attrHooks[c]||(fa.expr.match.bool.test(c)?ua:ta)),d===b?e&&"get"in e&&null!==(f=e.get(a,c))?f:(f=fa.find.attr(a,c),null==f?b:f):null!==d?e&&"set"in e&&(f=e.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d):void fa.removeAttr(a,c))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(ha);if(f&&1===a.nodeType)for(;c=f[e++];)d=fa.propFix[c]||c,fa.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!fa.support.radioValue&&"radio"===b&&fa.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(a&&3!==h&&8!==h&&2!==h)return g=1!==h||!fa.isXMLDoc(a),g&&(c=fa.propFix[c]||c,f=fa.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&null!==(e=f.get(a,c))?e:a[c]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||xa.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),ua={set:function(a,b,c){return b===!1?fa.removeAttr(a,c):a.setAttribute(c,c),c}},fa.each(fa.expr.match.bool.source.match(/\w+/g),function(a,c){var d=fa.expr.attrHandle[c]||fa.find.attr;fa.expr.attrHandle[c]=function(a,c,e){var f=fa.expr.attrHandle[c],g=e?b:(fa.expr.attrHandle[c]=b)!=d(a,c,e)?c.toLowerCase():null;return fa.expr.attrHandle[c]=f,g}}),fa.support.optSelected||(fa.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),fa.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){fa.propFix[this.toLowerCase()]=this}),fa.each(["radio","checkbox"],function(){fa.valHooks[this]={set:function(a,b){return fa.isArray(b)?a.checked=fa.inArray(fa(a).val(),b)>=0:void 0}},fa.support.checkOn||(fa.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var ya=/^key/,za=/^(?:mouse|contextmenu)|click/,Aa=/^(?:focusinfocus|focusoutblur)$/,Ba=/^([^.]*)(?:\.(.+)|)$/;fa.event={global:{},add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r=qa.get(a);if(r){for(d.handler&&(g=d,d=g.handler,f=g.selector),d.guid||(d.guid=fa.guid++),(j=r.events)||(j=r.events={}),(h=r.handle)||(h=r.handle=function(a){return typeof fa===R||a&&fa.event.triggered===a.type?b:fa.event.dispatch.apply(h.elem,arguments)},h.elem=a),c=(c||"").match(ha)||[""],k=c.length;k--;)i=Ba.exec(c[k])||[],o=q=i[1],p=(i[2]||"").split(".").sort(),o&&(m=fa.event.special[o]||{},o=(f?m.delegateType:m.bindType)||o,m=fa.event.special[o]||{},l=fa.extend({type:o,origType:q,data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&fa.expr.match.needsContext.test(f),namespace:p.join(".")},g),(n=j[o])||(n=j[o]=[],n.delegateCount=0,m.setup&&m.setup.call(a,e,p,h)!==!1||a.addEventListener&&a.addEventListener(o,h,!1)),m.add&&(m.add.call(a,l),l.handler.guid||(l.handler.guid=d.guid)),f?n.splice(n.delegateCount++,0,l):n.push(l),fa.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=qa.hasData(a)&&qa.get(a);if(q&&(i=q.events)){for(b=(b||"").match(ha)||[""],j=b.length;j--;)if(h=Ba.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=fa.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||fa.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)fa.event.remove(a,n+b[j],c,d,!0);fa.isEmptyObject(i)&&(delete q.handle,qa.remove(a,"events"))}},trigger:function(c,d,e,f){var g,h,i,j,k,l,m,n=[e||T],o=da.call(c,"type")?c.type:c,p=da.call(c,"namespace")?c.namespace.split("."):[];if(h=i=e=e||T,3!==e.nodeType&&8!==e.nodeType&&!Aa.test(o+fa.event.triggered)&&(o.indexOf(".")>=0&&(p=o.split("."),o=p.shift(),p.sort()),k=o.indexOf(":")<0&&"on"+o,c=c[fa.expando]?c:new fa.Event(o,"object"==typeof c&&c),c.isTrigger=f?2:3,c.namespace=p.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,c.result=b,c.target||(c.target=e),d=null==d?[c]:fa.makeArray(d,[c]),m=fa.event.special[o]||{},f||!m.trigger||m.trigger.apply(e,d)!==!1)){if(!f&&!m.noBubble&&!fa.isWindow(e)){for(j=m.delegateType||o,Aa.test(j+o)||(h=h.parentNode);h;h=h.parentNode)n.push(h),i=h;i===(e.ownerDocument||T)&&n.push(i.defaultView||i.parentWindow||a)}for(g=0;(h=n[g++])&&!c.isPropagationStopped();)c.type=g>1?j:m.bindType||o,l=(qa.get(h,"events")||{})[c.type]&&qa.get(h,"handle"),l&&l.apply(h,d),l=k&&h[k],l&&fa.acceptData(h)&&l.apply&&l.apply(h,d)===!1&&c.preventDefault();return c.type=o,f||c.isDefaultPrevented()||m._default&&m._default.apply(n.pop(),d)!==!1||!fa.acceptData(e)||k&&fa.isFunction(e[o])&&!fa.isWindow(e)&&(i=e[k],i&&(e[k]=null),fa.event.triggered=o,e[o](),fa.event.triggered=b,i&&(e[k]=i)),c.result}},dispatch:function(a){a=fa.event.fix(a);var c,d,e,f,g,h=[],i=aa.call(arguments),j=(qa.get(this,"events")||{})[a.type]||[],k=fa.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){for(h=fa.event.handlers.call(this,a,j),c=0;(f=h[c++])&&!a.isPropagationStopped();)for(a.currentTarget=f.elem,d=0;(g=f.handlers[d++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((fa.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),e!==b&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()));return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,c){var d,e,f,g,h=[],i=c.delegateCount,j=a.target;if(i&&j.nodeType&&(!a.button||"click"!==a.type))for(;j!==this;j=j.parentNode||this)if(j.disabled!==!0||"click"!==a.type){for(e=[],d=0;i>d;d++)g=c[d],f=g.selector+" ",e[f]===b&&(e[f]=g.needsContext?fa(f,this).index(j)>=0:fa.find(f,this,null,[j]).length),e[f]&&e.push(g);e.length&&h.push({elem:j,handlers:e})}return i<c.length&&h.push({elem:this,handlers:c.slice(i)}),h},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,e,f,g=c.button;return null==a.pageX&&null!=c.clientX&&(d=a.target.ownerDocument||T,e=d.documentElement,f=d.body,a.pageX=c.clientX+(e&&e.scrollLeft||f&&f.scrollLeft||0)-(e&&e.clientLeft||f&&f.clientLeft||0),a.pageY=c.clientY+(e&&e.scrollTop||f&&f.scrollTop||0)-(e&&e.clientTop||f&&f.clientTop||0)),a.which||g===b||(a.which=1&g?1:2&g?3:4&g?2:0),a}},fix:function(a){if(a[fa.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=za.test(e)?this.mouseHooks:ya.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new fa.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=T),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==i()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===i()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&fa.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return fa.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){a.result!==b&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=fa.extend(new fa.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?fa.event.trigger(e,null,b):fa.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},fa.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},fa.Event=function(a,b){return this instanceof fa.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.getPreventDefault&&a.getPreventDefault()?g:h):this.type=a,b&&fa.extend(this,b),this.timeStamp=a&&a.timeStamp||fa.now(),void(this[fa.expando]=!0)):new fa.Event(a,b)},fa.Event.prototype={isDefaultPrevented:h,isPropagationStopped:h,isImmediatePropagationStopped:h,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=g,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=g,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=g,this.stopPropagation()}},fa.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){fa.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!fa.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),fa.support.focusinBubbles||fa.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){fa.event.simulate(b,a.target,fa.event.fix(a),!0)};fa.event.special[b]={setup:function(){0===c++&&T.addEventListener(a,d,!0)},teardown:function(){0===--c&&T.removeEventListener(a,d,!0)}}}),fa.fn.extend({on:function(a,c,d,e,f){var g,i;if("object"==typeof a){"string"!=typeof c&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],f);return this}if(null==d&&null==e?(e=c,d=c=b):null==e&&("string"==typeof c?(e=d,d=b):(e=d,d=c,c=b)),e===!1)e=h;else if(!e)return this;return 1===f&&(g=e,e=function(a){return fa().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=fa.guid++)),this.each(function(){fa.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,fa(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if("object"==typeof a){for(f in a)this.off(f,c,a[f]);return this}return(c===!1||"function"==typeof c)&&(d=c,c=b),d===!1&&(d=h),this.each(function(){fa.event.remove(this,a,d,c)})},trigger:function(a,b){return this.each(function(){fa.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?fa.event.trigger(a,b,c,!0):void 0}});var Ca=/^.[^:#\[\.,]*$/,Da=/^(?:parents|prev(?:Until|All))/,Ea=fa.expr.match.needsContext,Fa={children:!0,contents:!0,next:!0,prev:!0};fa.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(fa(a).filter(function(){for(b=0;e>b;b++)if(fa.contains(d[b],this))return!0}));for(b=0;e>b;b++)fa.find(a,d[b],c);return c=this.pushStack(e>1?fa.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},has:function(a){var b=fa(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(fa.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(k(this,a||[],!0))},filter:function(a){return this.pushStack(k(this,a||[],!1))},is:function(a){return!!k(this,"string"==typeof a&&Ea.test(a)?fa(a):a||[],!1).length},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=Ea.test(a)||"string"!=typeof a?fa(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&fa.find.matchesSelector(c,a))){c=f.push(c);break}return this.pushStack(f.length>1?fa.unique(f):f)},index:function(a){return a?"string"==typeof a?ba.call(fa(a),this[0]):ba.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){var c="string"==typeof a?fa(a,b):fa.makeArray(a&&a.nodeType?[a]:a),d=fa.merge(this.get(),c);return this.pushStack(fa.unique(d))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),fa.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return fa.dir(a,"parentNode")},parentsUntil:function(a,b,c){return fa.dir(a,"parentNode",c)},next:function(a){return j(a,"nextSibling")},prev:function(a){return j(a,"previousSibling")},nextAll:function(a){return fa.dir(a,"nextSibling")},prevAll:function(a){return fa.dir(a,"previousSibling")},nextUntil:function(a,b,c){return fa.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return fa.dir(a,"previousSibling",c)},siblings:function(a){return fa.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return fa.sibling(a.firstChild)},contents:function(a){return a.contentDocument||fa.merge([],a.childNodes)}},function(a,b){fa.fn[a]=function(c,d){var e=fa.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=fa.filter(d,e)),this.length>1&&(Fa[a]||fa.unique(e),Da.test(a)&&e.reverse()),this.pushStack(e)}}),fa.extend({filter:function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?fa.find.matchesSelector(d,a)?[d]:[]:fa.find.matches(a,fa.grep(b,function(a){return 1===a.nodeType}))},dir:function(a,c,d){for(var e=[],f=d!==b;(a=a[c])&&9!==a.nodeType;)if(1===a.nodeType){if(f&&fa(a).is(d))break;e.push(a)}return e},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}});var Ga=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ha=/<([\w:]+)/,Ia=/<|&#?\w+;/,Ja=/<(?:script|style|link)/i,Ka=/^(?:checkbox|radio)$/i,La=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=/^$|\/(?:java|ecma)script/i,Na=/^true\/(.*)/,Oa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Pa={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Pa.optgroup=Pa.option,Pa.tbody=Pa.tfoot=Pa.colgroup=Pa.caption=Pa.thead,Pa.th=Pa.td,fa.fn.extend({text:function(a){return fa.access(this,function(a){return a===b?fa.text(this):this.empty().append((this[0]&&this[0].ownerDocument||T).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=l(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=l(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?fa.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||fa.cleanData(q(c)),c.parentNode&&(b&&fa.contains(c.ownerDocument,c)&&o(q(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(fa.cleanData(q(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return fa.clone(this,a,b)})},html:function(a){return fa.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b&&1===c.nodeType)return c.innerHTML;if("string"==typeof a&&!Ja.test(a)&&!Pa[(Ha.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ga,"<$1></$2>");try{for(;e>d;d++)c=this[d]||{},1===c.nodeType&&(fa.cleanData(q(c,!1)),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=fa.map(this,function(a){return[a.nextSibling,a.parentNode]}),b=0;return this.domManip(arguments,function(c){var d=a[b++],e=a[b++];e&&(d&&d.parentNode!==e&&(d=this.nextSibling),fa(this).remove(),e.insertBefore(c,d))},!0),b?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b,c){a=$.apply([],a);var d,e,f,g,h,i,j=0,k=this.length,l=this,o=k-1,p=a[0],r=fa.isFunction(p);if(r||!(1>=k||"string"!=typeof p||fa.support.checkClone)&&La.test(p))return this.each(function(d){var e=l.eq(d);r&&(a[0]=p.call(this,d,e.html())),e.domManip(a,b,c)});if(k&&(d=fa.buildFragment(a,this[0].ownerDocument,!1,!c&&this),e=d.firstChild,1===d.childNodes.length&&(d=e),e)){for(f=fa.map(q(d,"script"),m),g=f.length;k>j;j++)h=d,j!==o&&(h=fa.clone(h,!0,!0),g&&fa.merge(f,q(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,fa.map(f,n),j=0;g>j;j++)h=f[j],Ma.test(h.type||"")&&!qa.access(h,"globalEval")&&fa.contains(i,h)&&(h.src?fa._evalUrl(h.src):fa.globalEval(h.textContent.replace(Oa,"")))}return this}}),fa.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){fa.fn[a]=function(a){for(var c,d=[],e=fa(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),fa(e[g])[b](c),_.apply(d,c.get());return this.pushStack(d)}}),fa.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=fa.contains(a.ownerDocument,a);if(!(fa.support.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||fa.isXMLDoc(a)))for(g=q(h),f=q(a),d=0,e=f.length;e>d;d++)r(f[d],g[d]);if(b)if(c)for(f=f||q(a),g=g||q(h),d=0,e=f.length;e>d;d++)p(f[d],g[d]);else p(a,h);return g=q(h,"script"),g.length>0&&o(g,!i&&q(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=0,l=a.length,m=b.createDocumentFragment(),n=[];l>k;k++)if(e=a[k],e||0===e)if("object"===fa.type(e))fa.merge(n,e.nodeType?[e]:e);else if(Ia.test(e)){for(f=f||m.appendChild(b.createElement("div")),g=(Ha.exec(e)||["",""])[1].toLowerCase(),h=Pa[g]||Pa._default,f.innerHTML=h[1]+e.replace(Ga,"<$1></$2>")+h[2],j=h[0];j--;)f=f.lastChild;fa.merge(n,f.childNodes),f=m.firstChild,f.textContent=""}else n.push(b.createTextNode(e));for(m.textContent="",k=0;e=n[k++];)if((!d||-1===fa.inArray(e,d))&&(i=fa.contains(e.ownerDocument,e),f=q(m.appendChild(e),"script"),i&&o(f),c))for(j=0;e=f[j++];)Ma.test(e.type||"")&&c.push(e);return m},cleanData:function(a){for(var c,d,f,g,h,i,j=fa.event.special,k=0;(d=a[k])!==b;k++){if(e.accepts(d)&&(h=d[qa.expando],h&&(c=qa.cache[h]))){if(f=Object.keys(c.events||{}),f.length)for(i=0;(g=f[i])!==b;i++)j[g]?fa.event.remove(d,g):fa.removeEvent(d,g,c.handle);qa.cache[h]&&delete qa.cache[h]}delete pa.cache[d[pa.expando]]}},_evalUrl:function(a){return fa.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),fa.fn.extend({wrapAll:function(a){var b;return fa.isFunction(a)?this.each(function(b){fa(this).wrapAll(a.call(this,b))}):(this[0]&&(b=fa(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return fa.isFunction(a)?this.each(function(b){fa(this).wrapInner(a.call(this,b))}):this.each(function(){var b=fa(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=fa.isFunction(a);return this.each(function(c){fa(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){fa.nodeName(this,"body")||fa(this).replaceWith(this.childNodes)}).end()}});var Qa,Ra,Sa=/^(none|table(?!-c[ea]).+)/,Ta=/^margin/,Ua=new RegExp("^("+ga+")(.*)$","i"),Va=new RegExp("^("+ga+")(?!px)[a-z%]+$","i"),Wa=new RegExp("^([+-])=("+ga+")","i"),Xa={BODY:"block"},Ya={position:"absolute",visibility:"hidden",display:"block"},Za={letterSpacing:0,fontWeight:400},$a=["Top","Right","Bottom","Left"],_a=["Webkit","O","Moz","ms"];
fa.fn.extend({css:function(a,c){return fa.access(this,function(a,c,d){var e,f,g={},h=0;if(fa.isArray(c)){for(e=u(a),f=c.length;f>h;h++)g[c[h]]=fa.css(a,c[h],!1,e);return g}return d!==b?fa.style(a,c,d):fa.css(a,c)},a,c,arguments.length>1)},show:function(){return v(this,!0)},hide:function(){return v(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){t(this)?fa(this).show():fa(this).hide()})}}),fa.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Qa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=fa.camelCase(c),j=a.style;return c=fa.cssProps[i]||(fa.cssProps[i]=s(j,i)),h=fa.cssHooks[c]||fa.cssHooks[i],d===b?h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c]:(g=typeof d,"string"===g&&(f=Wa.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(fa.css(a,c)),g="number"),null==d||"number"===g&&isNaN(d)||("number"!==g||fa.cssNumber[i]||(d+="px"),fa.support.clearCloneStyle||""!==d||0!==c.indexOf("background")||(j[c]="inherit"),h&&"set"in h&&(d=h.set(a,d,e))===b||(j[c]=d)),void 0)}},css:function(a,c,d,e){var f,g,h,i=fa.camelCase(c);return c=fa.cssProps[i]||(fa.cssProps[i]=s(a.style,i)),h=fa.cssHooks[c]||fa.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,d)),f===b&&(f=Qa(a,c,e)),"normal"===f&&c in Za&&(f=Za[c]),""===d||d?(g=parseFloat(f),d===!0||fa.isNumeric(g)?g||0:f):f}}),Qa=function(a,c,d){var e,f,g,h=d||u(a),i=h?h.getPropertyValue(c)||h[c]:b,j=a.style;return h&&(""!==i||fa.contains(a.ownerDocument,a)||(i=fa.style(a,c)),Va.test(i)&&Ta.test(c)&&(e=j.width,f=j.minWidth,g=j.maxWidth,j.minWidth=j.maxWidth=j.width=i,i=h.width,j.width=e,j.minWidth=f,j.maxWidth=g)),i},fa.each(["height","width"],function(a,b){fa.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Sa.test(fa.css(a,"display"))?fa.swap(a,Ya,function(){return y(a,b,d)}):y(a,b,d):void 0},set:function(a,c,d){var e=d&&u(a);return w(a,c,d?x(a,b,d,fa.support.boxSizing&&"border-box"===fa.css(a,"boxSizing",!1,e),e):0)}}}),fa(function(){fa.support.reliableMarginRight||(fa.cssHooks.marginRight={get:function(a,b){return b?fa.swap(a,{display:"inline-block"},Qa,[a,"marginRight"]):void 0}}),!fa.support.pixelPosition&&fa.fn.position&&fa.each(["top","left"],function(a,b){fa.cssHooks[b]={get:function(a,c){return c?(c=Qa(a,b),Va.test(c)?fa(a).position()[b]+"px":c):void 0}}})}),fa.expr&&fa.expr.filters&&(fa.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},fa.expr.filters.visible=function(a){return!fa.expr.filters.hidden(a)}),fa.each({margin:"",padding:"",border:"Width"},function(a,b){fa.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+$a[d]+b]=f[d]||f[d-2]||f[0];return e}},Ta.test(a)||(fa.cssHooks[a+b].set=w)});var ab=/%20/g,bb=/\[\]$/,cb=/\r?\n/g,db=/^(?:submit|button|image|reset|file)$/i,eb=/^(?:input|select|textarea|keygen)/i;fa.fn.extend({serialize:function(){return fa.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=fa.prop(this,"elements");return a?fa.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!fa(this).is(":disabled")&&eb.test(this.nodeName)&&!db.test(a)&&(this.checked||!Ka.test(a))}).map(function(a,b){var c=fa(this).val();return null==c?null:fa.isArray(c)?fa.map(c,function(a){return{name:b.name,value:a.replace(cb,"\r\n")}}):{name:b.name,value:c.replace(cb,"\r\n")}}).get()}}),fa.param=function(a,c){var d,e=[],f=function(a,b){b=fa.isFunction(b)?b():null==b?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(c===b&&(c=fa.ajaxSettings&&fa.ajaxSettings.traditional),fa.isArray(a)||a.jquery&&!fa.isPlainObject(a))fa.each(a,function(){f(this.name,this.value)});else for(d in a)B(d,a[d],c,f);return e.join("&").replace(ab,"+")},fa.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){fa.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),fa.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var fb,gb,hb=fa.now(),ib=/\?/,jb=/#.*$/,kb=/([?&])_=[^&]*/,lb=/^(.*?):[ \t]*([^\r\n]*)$/gm,mb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,nb=/^(?:GET|HEAD)$/,ob=/^\/\//,pb=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,qb=fa.fn.load,rb={},sb={},tb="*/".concat("*");try{gb=S.href}catch(ub){gb=T.createElement("a"),gb.href="",gb=gb.href}fb=pb.exec(gb.toLowerCase())||[],fa.fn.load=function(a,c,d){if("string"!=typeof a&&qb)return qb.apply(this,arguments);var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i),a=a.slice(0,i)),fa.isFunction(c)?(d=c,c=b):c&&"object"==typeof c&&(f="POST"),h.length>0&&fa.ajax({url:a,type:f,dataType:"html",data:c}).done(function(a){g=arguments,h.html(e?fa("<div>").append(fa.parseHTML(a)).find(e):a)}).complete(d&&function(a,b){h.each(d,g||[a.responseText,b,a])}),this},fa.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){fa.fn[b]=function(a){return this.on(b,a)}}),fa.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:gb,type:"GET",isLocal:mb.test(fb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":tb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":fa.parseJSON,"text xml":fa.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?E(E(a,fa.ajaxSettings),b):E(fa.ajaxSettings,a)},ajaxPrefilter:C(rb),ajaxTransport:C(sb),ajax:function(a,c){function d(a,c,d,h){var j,l,s,t,v,x=c;2!==u&&(u=2,i&&clearTimeout(i),e=b,g=h||"",w.readyState=a>0?4:0,j=a>=200&&300>a||304===a,d&&(t=F(m,w,d)),t=G(m,t,w,j),j?(m.ifModified&&(v=w.getResponseHeader("Last-Modified"),v&&(fa.lastModified[f]=v),v=w.getResponseHeader("etag"),v&&(fa.etag[f]=v)),204===a||"HEAD"===m.type?x="nocontent":304===a?x="notmodified":(x=t.state,l=t.data,s=t.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),w.status=a,w.statusText=(c||x)+"",j?p.resolveWith(n,[l,x,w]):p.rejectWith(n,[w,x,s]),w.statusCode(r),r=b,k&&o.trigger(j?"ajaxSuccess":"ajaxError",[w,m,j?l:s]),q.fireWith(n,[w,x]),k&&(o.trigger("ajaxComplete",[w,m]),--fa.active||fa.event.trigger("ajaxStop")))}"object"==typeof a&&(c=a,a=b),c=c||{};var e,f,g,h,i,j,k,l,m=fa.ajaxSetup({},c),n=m.context||m,o=m.context&&(n.nodeType||n.jquery)?fa(n):fa.event,p=fa.Deferred(),q=fa.Callbacks("once memory"),r=m.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!h)for(h={};b=lb.exec(g);)h[b[1].toLowerCase()]=b[2];b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return e&&e.abort(b),d(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,m.url=((a||m.url||gb)+"").replace(jb,"").replace(ob,fb[1]+"//"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=fa.trim(m.dataType||"*").toLowerCase().match(ha)||[""],null==m.crossDomain&&(j=pb.exec(m.url.toLowerCase()),m.crossDomain=!(!j||j[1]===fb[1]&&j[2]===fb[2]&&(j[3]||("http:"===j[1]?"80":"443"))===(fb[3]||("http:"===fb[1]?"80":"443")))),m.data&&m.processData&&"string"!=typeof m.data&&(m.data=fa.param(m.data,m.traditional)),D(rb,m,c,w),2===u)return w;k=m.global,k&&0===fa.active++&&fa.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!nb.test(m.type),f=m.url,m.hasContent||(m.data&&(f=m.url+=(ib.test(f)?"&":"?")+m.data,delete m.data),m.cache===!1&&(m.url=kb.test(f)?f.replace(kb,"$1_="+hb++):f+(ib.test(f)?"&":"?")+"_="+hb++)),m.ifModified&&(fa.lastModified[f]&&w.setRequestHeader("If-Modified-Since",fa.lastModified[f]),fa.etag[f]&&w.setRequestHeader("If-None-Match",fa.etag[f])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",m.contentType),w.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+tb+"; q=0.01":""):m.accepts["*"]);for(l in m.headers)w.setRequestHeader(l,m.headers[l]);if(m.beforeSend&&(m.beforeSend.call(n,w,m)===!1||2===u))return w.abort();v="abort";for(l in{success:1,error:1,complete:1})w[l](m[l]);if(e=D(sb,m,c,w)){w.readyState=1,k&&o.trigger("ajaxSend",[w,m]),m.async&&m.timeout>0&&(i=setTimeout(function(){w.abort("timeout")},m.timeout));try{u=1,e.send(s,d)}catch(x){if(!(2>u))throw x;d(-1,x)}}else d(-1,"No Transport");return w},getJSON:function(a,b,c){return fa.get(a,b,c,"json")},getScript:function(a,c){return fa.get(a,b,c,"script")}}),fa.each(["get","post"],function(a,c){fa[c]=function(a,d,e,f){return fa.isFunction(d)&&(f=f||e,e=d,d=b),fa.ajax({url:a,type:c,dataType:f,data:d,success:e})}}),fa.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return fa.globalEval(a),a}}}),fa.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),fa.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=fa("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),T.head.appendChild(b[0])},abort:function(){c&&c()}}}});var vb=[],wb=/(=)\?(?=&|$)|\?\?/;fa.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=vb.pop()||fa.expando+"_"+hb++;return this[a]=!0,a}}),fa.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.jsonp!==!1&&(wb.test(c.url)?"url":"string"==typeof c.data&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&wb.test(c.data)&&"data");return i||"jsonp"===c.dataTypes[0]?(f=c.jsonpCallback=fa.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,i?c[i]=c[i].replace(wb,"$1"+f):c.jsonp!==!1&&(c.url+=(ib.test(c.url)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||fa.error(f+" was not called"),h[0]},c.dataTypes[0]="json",g=a[f],a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,vb.push(f)),h&&fa.isFunction(g)&&g(h[0]),h=g=b}),"script"):void 0}),fa.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var xb=fa.ajaxSettings.xhr(),yb={0:200,1223:204},zb=0,Ab={};a.ActiveXObject&&fa(a).on("unload",function(){for(var a in Ab)Ab[a]();Ab=b}),fa.support.cors=!!xb&&"withCredentials"in xb,fa.support.ajax=xb=!!xb,fa.ajaxTransport(function(a){var c;return fa.support.cors||xb&&!a.crossDomain?{send:function(d,e){var f,g,h=a.xhr();if(h.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(f in a.xhrFields)h[f]=a.xhrFields[f];a.mimeType&&h.overrideMimeType&&h.overrideMimeType(a.mimeType),a.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)h.setRequestHeader(f,d[f]);c=function(a){return function(){c&&(delete Ab[g],c=h.onload=h.onerror=null,"abort"===a?h.abort():"error"===a?e(h.status||404,h.statusText):e(yb[h.status]||h.status,h.statusText,"string"==typeof h.responseText?{text:h.responseText}:b,h.getAllResponseHeaders()))}},h.onload=c(),h.onerror=c("error"),c=Ab[g=zb++]=c("abort"),h.send(a.hasContent&&a.data||null)},abort:function(){c&&c()}}:void 0});var Bb,Cb,Db=/^(?:toggle|show|hide)$/,Eb=new RegExp("^(?:([+-])=|)("+ga+")([a-z%]*)$","i"),Fb=/queueHooks$/,Gb=[L],Hb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Eb.exec(b),f=e&&e[3]||(fa.cssNumber[a]?"":"px"),g=(fa.cssNumber[a]||"px"!==f&&+d)&&Eb.exec(fa.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,fa.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};fa.Animation=fa.extend(J,{tweener:function(a,b){fa.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Hb[c]=Hb[c]||[],Hb[c].unshift(b)},prefilter:function(a,b){b?Gb.unshift(a):Gb.push(a)}}),fa.Tween=M,M.prototype={constructor:M,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(fa.cssNumber[c]?"":"px")},cur:function(){var a=M.propHooks[this.prop];return a&&a.get?a.get(this):M.propHooks._default.get(this)},run:function(a){var b,c=M.propHooks[this.prop];return this.options.duration?this.pos=b=fa.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):M.propHooks._default.set(this),this}},M.prototype.init.prototype=M.prototype,M.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=fa.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){fa.fx.step[a.prop]?fa.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[fa.cssProps[a.prop]]||fa.cssHooks[a.prop])?fa.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},M.propHooks.scrollTop=M.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},fa.each(["toggle","show","hide"],function(a,b){var c=fa.fn[b];fa.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(N(b,!0),a,d,e)}}),fa.fn.extend({fadeTo:function(a,b,c,d){return this.filter(t).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=fa.isEmptyObject(a),f=fa.speed(b,c,d),g=function(){var b=J(this,fa.extend({},a),f);(e||qa.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return"string"!=typeof a&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=null!=a&&a+"queueHooks",f=fa.timers,g=qa.get(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&Fb.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem!==this||null!=a&&f[c].queue!==a||(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&fa.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=qa.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=fa.timers,g=d?d.length:0;for(c.finish=!0,fa.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),fa.each({slideDown:N("show"),slideUp:N("hide"),slideToggle:N("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){fa.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),fa.speed=function(a,b,c){var d=a&&"object"==typeof a?fa.extend({},a):{complete:c||!c&&b||fa.isFunction(a)&&a,duration:a,easing:c&&b||b&&!fa.isFunction(b)&&b};return d.duration=fa.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in fa.fx.speeds?fa.fx.speeds[d.duration]:fa.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){fa.isFunction(d.old)&&d.old.call(this),d.queue&&fa.dequeue(this,d.queue)},d},fa.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},fa.timers=[],fa.fx=M.prototype.init,fa.fx.tick=function(){var a,c=fa.timers,d=0;for(Bb=fa.now();d<c.length;d++)a=c[d],a()||c[d]!==a||c.splice(d--,1);c.length||fa.fx.stop(),Bb=b},fa.fx.timer=function(a){a()&&fa.timers.push(a)&&fa.fx.start()},fa.fx.interval=13,fa.fx.start=function(){Cb||(Cb=setInterval(fa.fx.tick,fa.fx.interval))},fa.fx.stop=function(){clearInterval(Cb),Cb=null},fa.fx.speeds={slow:600,fast:200,_default:400},fa.fx.step={},fa.expr&&fa.expr.filters&&(fa.expr.filters.animated=function(a){return fa.grep(fa.timers,function(b){return a===b.elem}).length}),fa.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){fa.offset.setOffset(this,a,b)});var c,d,e=this[0],f={top:0,left:0},g=e&&e.ownerDocument;if(g)return c=g.documentElement,fa.contains(c,e)?(typeof e.getBoundingClientRect!==R&&(f=e.getBoundingClientRect()),d=O(g),{top:f.top+d.pageYOffset-c.clientTop,left:f.left+d.pageXOffset-c.clientLeft}):f},fa.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=fa.css(a,"position"),l=fa(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=fa.css(a,"top"),i=fa.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),fa.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},fa.fn.extend({position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===fa.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),fa.nodeName(a[0],"html")||(d=a.offset()),d.top+=fa.css(a[0],"borderTopWidth",!0),d.left+=fa.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-fa.css(c,"marginTop",!0),left:b.left-d.left-fa.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||U;a&&!fa.nodeName(a,"html")&&"static"===fa.css(a,"position");)a=a.offsetParent;return a||U})}}),fa.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(c,d){var e="pageYOffset"===d;fa.fn[c]=function(f){return fa.access(this,function(c,f,g){var h=O(c);return g===b?h?h[d]:c[f]:void(h?h.scrollTo(e?a.pageXOffset:g,e?g:a.pageYOffset):c[f]=g)},c,f,arguments.length,null)}}),fa.each({Height:"height",Width:"width"},function(a,c){fa.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){fa.fn[e]=function(e,f){var g=arguments.length&&(d||"boolean"!=typeof e),h=d||(e===!0||f===!0?"margin":"border");return fa.access(this,function(c,d,e){var f;return fa.isWindow(c)?c.document.documentElement["client"+a]:9===c.nodeType?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?fa.css(c,d,h):fa.style(c,d,e,h)},c,g?e:b,g,null)}})}),fa.fn.size=function(){return this.length},fa.fn.andSelf=fa.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.export
gitextract_6f4n4z2d/
├── README.md
├── advanced/
│ ├── .gitignore
│ ├── advanced.iml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── advanced/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── aidl/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── advanced/
│ │ │ └── aidl/
│ │ │ ├── INoteManager.aidl
│ │ │ └── Note.aidl
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── advanced/
│ │ │ ├── Activity2.java
│ │ │ ├── MainActivity.java
│ │ │ ├── ModuleAdvancedApp.java
│ │ │ ├── aidl/
│ │ │ │ ├── Note.java
│ │ │ │ └── NoteService.java
│ │ │ ├── callback/
│ │ │ │ ├── ActResultRequest.java
│ │ │ │ └── OnActResultEventDispatcherFragment.java
│ │ │ ├── keepalive/
│ │ │ │ └── LongLiveService.java
│ │ │ ├── messenger/
│ │ │ │ └── MessengerService.java
│ │ │ └── remote/
│ │ │ ├── Remote2Activity.java
│ │ │ └── RemoteActivity.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── activity_2.xml
│ │ │ ├── activity_advanced.xml
│ │ │ └── activity_remote.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── advanced/
│ └── ExampleUnitTest.java
├── animations/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── animations/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── animations/
│ │ │ ├── DrawableActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── ModuleAnimationsApp.java
│ │ │ └── reveal/
│ │ │ └── CircleRevealActivity.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ ├── drawable_bitmap.xml
│ │ │ ├── drawable_bitmap_no_filter.xml
│ │ │ ├── drawable_layer.xml
│ │ │ └── ic_launcher_background.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_anim.xml
│ │ │ ├── activity_circle_reveal.xml
│ │ │ └── activity_drawable.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── animations/
│ └── ExampleUnitTest.java
├── client/
│ ├── .gitignore
│ ├── app/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── channel
│ │ ├── fabric.properties
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── references/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets/
│ │ │ │ ├── camera.aar
│ │ │ │ ├── guokr.articleInline.js
│ │ │ │ ├── guokr.base.js
│ │ │ │ └── guokr_master.css
│ │ │ ├── java/
│ │ │ │ └── me/
│ │ │ │ └── shouheng/
│ │ │ │ └── references/
│ │ │ │ ├── MyApplication.java
│ │ │ │ ├── view/
│ │ │ │ │ ├── intro/
│ │ │ │ │ │ ├── AppIntroActivity.java
│ │ │ │ │ │ ├── IntroFragment.java
│ │ │ │ │ │ ├── IntroSlide1.java
│ │ │ │ │ │ ├── IntroSlide2.java
│ │ │ │ │ │ ├── IntroSlide3.java
│ │ │ │ │ │ └── IntroSlide4.java
│ │ │ │ │ └── main/
│ │ │ │ │ └── MainActivity.java
│ │ │ │ └── viewmodel/
│ │ │ │ └── MainViewModel.java
│ │ │ └── res/
│ │ │ ├── layout/
│ │ │ │ ├── activity_main.xml
│ │ │ │ └── fragment_intro_slide.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ ├── provider_paths.xml
│ │ │ └── shortcuts.xml
│ │ └── test/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── references/
│ │ └── ExampleUnitTest.java
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── palm.jks
│ └── settings.gradle
├── commons/
│ ├── .gitignore
│ ├── build.gradle
│ ├── libs/
│ │ └── pldroid-player-1.5.0.jar
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── commons/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── commons/
│ │ │ ├── BaseApplication.java
│ │ │ ├── config/
│ │ │ │ ├── BaseConstants.java
│ │ │ │ └── Configs.java
│ │ │ ├── di/
│ │ │ │ ├── AppComponent.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── ActivityScoped.java
│ │ │ │ │ └── ViewModelKey.java
│ │ │ │ └── module/
│ │ │ │ └── AppModule.java
│ │ │ ├── model/
│ │ │ │ ├── Resource.java
│ │ │ │ └── Status.java
│ │ │ ├── rxbus/
│ │ │ │ └── RxBus.java
│ │ │ ├── tools/
│ │ │ │ ├── ColorUtils.java
│ │ │ │ ├── FragmentHelper.java
│ │ │ │ ├── LogUtils.java
│ │ │ │ ├── NetworkUtils.java
│ │ │ │ ├── PalmUtils.java
│ │ │ │ ├── StringUtils.java
│ │ │ │ ├── TimeUtils.java
│ │ │ │ ├── ToastUtils.java
│ │ │ │ ├── ViewUtils.java
│ │ │ │ ├── glide/
│ │ │ │ │ └── MyAppGlideModule.java
│ │ │ │ ├── permission/
│ │ │ │ │ ├── OnGetPermissionCallback.java
│ │ │ │ │ └── PermissionUtils.java
│ │ │ │ └── theme/
│ │ │ │ ├── SystemUiVisibilityUtil.java
│ │ │ │ └── ThemeUtils.java
│ │ │ └── view/
│ │ │ ├── activity/
│ │ │ │ ├── BaseActivity.java
│ │ │ │ ├── CommonActivity.java
│ │ │ │ ├── CommonDaggerActivity.java
│ │ │ │ └── UMengActivity.java
│ │ │ ├── fragment/
│ │ │ │ ├── CommonDaggerFragment.java
│ │ │ │ └── CommonFragment.java
│ │ │ └── widget/
│ │ │ ├── CircleImageView.java
│ │ │ ├── DividerItemDecoration.java
│ │ │ ├── DragSortRecycler.java
│ │ │ ├── EmptyView.java
│ │ │ ├── SpaceItemDecoration.java
│ │ │ ├── SquareFrameLayout.java
│ │ │ └── SquareImageView.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ ├── bg_toolbar_shade.xml
│ │ │ ├── ic_account_circle_black_24dp.xml
│ │ │ ├── ic_add_black_24dp.xml
│ │ │ ├── ic_autorenew_black_24dp.xml
│ │ │ ├── ic_check_circle_black_24dp.xml
│ │ │ ├── ic_close_black_24dp.xml
│ │ │ ├── ic_favorite_black_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_launcher_foreground.xml
│ │ │ ├── ic_widgets_black_24dp.xml
│ │ │ ├── item_divider_black.xml
│ │ │ ├── item_divider_white.xml
│ │ │ └── nav_item_color.xml
│ │ ├── layout/
│ │ │ ├── layout_toolbar.xml
│ │ │ └── widget_empty_view.xml
│ │ ├── values/
│ │ │ ├── attrs.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── xml/
│ │ └── network_security_config.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── commons/
│ └── ExampleUnitTest.java
├── eyepetizer/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── eyepetizer/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── eyepetizer/
│ │ │ ├── ModuleEyepetizerApp.java
│ │ │ ├── mvp/
│ │ │ │ ├── base/
│ │ │ │ │ ├── BasePresenter.java
│ │ │ │ │ └── BaseView.java
│ │ │ │ ├── contract/
│ │ │ │ │ └── HomeContract.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── HomeModel.java
│ │ │ │ │ └── bean/
│ │ │ │ │ └── HomeBean.java
│ │ │ │ └── presenter/
│ │ │ │ └── HomePresenter.java
│ │ │ ├── net/
│ │ │ │ ├── APIRetrofit.java
│ │ │ │ └── APIService.java
│ │ │ └── ui/
│ │ │ ├── activity/
│ │ │ │ ├── ContainerActivity.java
│ │ │ │ └── HomeActivity.java
│ │ │ ├── adapter/
│ │ │ │ └── HomeAdapter.java
│ │ │ └── fragment/
│ │ │ └── VideoFragment.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ └── ic_launcher_background.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_container.xml
│ │ │ ├── activity_eyepetizer_menu.xml
│ │ │ ├── fragment_eye_video.xml
│ │ │ └── item_home.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── eyepetizer/
│ └── ExampleUnitTest.java
├── guokr/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── guokr/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── guokr/
│ │ │ ├── ModuleGuokrApp.java
│ │ │ ├── model/
│ │ │ │ ├── data/
│ │ │ │ │ ├── GuokrNews.java
│ │ │ │ │ └── GuokrNewsContent.java
│ │ │ │ └── repository/
│ │ │ │ ├── GuokrRetrofit.java
│ │ │ │ └── GuokrService.java
│ │ │ ├── view/
│ │ │ │ ├── GuokrNewsActivity.java
│ │ │ │ ├── adapter/
│ │ │ │ │ └── GuokrNewsAdapter.java
│ │ │ │ └── fragment/
│ │ │ │ ├── NewsDetailFragment.java
│ │ │ │ └── NewsListFragment.java
│ │ │ └── viewmodel/
│ │ │ └── GuokrViewModel.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ └── ic_launcher_background.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_guokr_bews.xml
│ │ │ ├── fragment_news_detail.xml
│ │ │ ├── fragment_news_list.xml
│ │ │ └── item_guokr_news.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── guokr/
│ └── ExampleUnitTest.java
├── knife-annotation/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── knife/
│ └── annotation/
│ ├── BindView.java
│ └── OnClick.java
├── knife-api/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── knife/
│ │ └── api/
│ │ ├── Injector.java
│ │ ├── MyKnife.java
│ │ ├── Unbinder.java
│ │ └── finder/
│ │ ├── ActivityFinder.java
│ │ ├── Finder.java
│ │ └── ViewFinder.java
│ └── res/
│ └── values/
│ └── strings.xml
├── knife-compiler/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── knife/
│ └── compiler/
│ ├── BindViewProcessor.java
│ ├── TypeUtils.java
│ └── model/
│ ├── AnnotatedClass.java
│ ├── BindViewField.java
│ └── OnClickMethod.java
├── layout/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── layout/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── shouheng/
│ │ │ └── layout/
│ │ │ ├── ModuleLayoutApp.java
│ │ │ ├── common/
│ │ │ │ └── NormalTipsFragment.java
│ │ │ └── view/
│ │ │ ├── ActivityEditLayout.java
│ │ │ ├── DrawerActivity.java
│ │ │ ├── LayoutMenuActivity.java
│ │ │ ├── adapter/
│ │ │ │ ├── AdapterUtils.java
│ │ │ │ └── BeforeAdapter.java
│ │ │ ├── bottomsheet/
│ │ │ │ └── BottomSheetActivity.java
│ │ │ ├── collapse/
│ │ │ │ └── CollapseBarStructure.java
│ │ │ ├── custom/
│ │ │ │ └── CustomView.java
│ │ │ ├── navigation/
│ │ │ │ ├── NavigationActivity.java
│ │ │ │ └── fragment/
│ │ │ │ └── PagerFragment.java
│ │ │ ├── scrolling/
│ │ │ │ └── ScrollingActivity.java
│ │ │ ├── support28/
│ │ │ │ ├── BottomAppBarActivity.java
│ │ │ │ └── Support28Activity.java
│ │ │ ├── swipe/
│ │ │ │ └── SwipeBackDemoActivity.java
│ │ │ ├── tabbed/
│ │ │ │ └── TabbedActivity.java
│ │ │ └── views/
│ │ │ ├── CustomView.java
│ │ │ ├── ViewAnimateActivity.java
│ │ │ └── ViewSystemActivity.java
│ │ └── res/
│ │ ├── anim/
│ │ │ ├── cycle_7.xml
│ │ │ ├── layout_anim.xml
│ │ │ └── shake.xml
│ │ ├── drawable/
│ │ │ ├── branded_background.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── record_anim.xml
│ │ │ └── side_nav_bar.xml
│ │ ├── drawable-v21/
│ │ │ ├── ic_menu_camera.xml
│ │ │ ├── ic_menu_gallery.xml
│ │ │ ├── ic_menu_manage.xml
│ │ │ ├── ic_menu_send.xml
│ │ │ ├── ic_menu_share.xml
│ │ │ └── ic_menu_slideshow.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_adapter.xml
│ │ │ ├── activity_bottom_app_bar.xml
│ │ │ ├── activity_bottom_sheet.xml
│ │ │ ├── activity_collapse_bar_structure.xml
│ │ │ ├── activity_drawer.xml
│ │ │ ├── activity_edit_layout.xml
│ │ │ ├── activity_layout_menu.xml
│ │ │ ├── activity_navigation.xml
│ │ │ ├── activity_scrolling.xml
│ │ │ ├── activity_support_28.xml
│ │ │ ├── activity_swipe_back.xml
│ │ │ ├── activity_tabbed.xml
│ │ │ ├── activity_view_animate.xml
│ │ │ ├── activity_view_system.xml
│ │ │ ├── app_bar_drawer.xml
│ │ │ ├── bottom_sheet_dialog.xml
│ │ │ ├── content_drawer.xml
│ │ │ ├── fragment_normal_tips.xml
│ │ │ ├── fragment_pager.xml
│ │ │ └── nav_header_drawer.xml
│ │ ├── menu/
│ │ │ ├── activity_drawer_drawer.xml
│ │ │ ├── bottom_navigation.xml
│ │ │ └── drawer.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── drawables.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── values-v21/
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── layout/
│ └── ExampleUnitTest.java
├── libraries/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── debug/
│ │ └── AndroidManifest.xml
│ ├── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── libraries/
│ │ ├── FingerprintIdentifyActivity.java
│ │ ├── MenuActivity.java
│ │ ├── ModuleLibraryApp.java
│ │ ├── MyKnifeActivity.java
│ │ ├── TimberActivity.java
│ │ ├── eventbus/
│ │ │ ├── EventBusActivity1.java
│ │ │ ├── EventBusActivity2.java
│ │ │ └── MessageWrap.java
│ │ ├── handler/
│ │ │ ├── FileRecognizeTask.java
│ │ │ └── HandlerActivity.java
│ │ ├── image/
│ │ │ ├── ClipPictureActivity.java
│ │ │ └── ImageCompressActivity.java
│ │ ├── rxjava/
│ │ │ ├── DemoFragment.java
│ │ │ ├── RxBusActivity.java
│ │ │ ├── RxJavaActivity.java
│ │ │ └── RxMessage.java
│ │ ├── serial/
│ │ │ ├── SerializeActivity.java
│ │ │ └── SerializeUtils.java
│ │ └── workmanager/
│ │ ├── PeriodicTask.java
│ │ ├── SingleTask.java
│ │ ├── SingleTask2.java
│ │ └── WorkManagerActivity.java
│ └── res/
│ ├── drawable/
│ │ └── ic_launcher_background.xml
│ ├── drawable-v24/
│ │ └── ic_launcher_foreground.xml
│ ├── layout/
│ │ ├── activity_clip_picture.xml
│ │ ├── activity_event_bus1.xml
│ │ ├── activity_event_bus2.xml
│ │ ├── activity_fingerprint_identify.xml
│ │ ├── activity_handler.xml
│ │ ├── activity_image_compress.xml
│ │ ├── activity_menu.xml
│ │ ├── activity_my_knife.xml
│ │ ├── activity_rx_bus.xml
│ │ ├── activity_rxjava.xml
│ │ ├── activity_serialize.xml
│ │ ├── activity_timber.xml
│ │ ├── activity_work_manager.xml
│ │ └── fragment_demo.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ └── values/
│ ├── colors.xml
│ ├── strings.xml
│ └── styles.xml
└── live/
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src/
├── androidTest/
│ └── java/
│ └── me/
│ └── shouheng/
│ └── live/
│ └── ExampleInstrumentedTest.java
├── main/
│ ├── AndroidManifest.xml
│ ├── debug/
│ │ └── AndroidManifest.xml
│ ├── java/
│ │ └── me/
│ │ └── shouheng/
│ │ └── live/
│ │ ├── LiveModuleApp.java
│ │ ├── common/
│ │ │ ├── DecimalFormatUtil.java
│ │ │ └── widget/
│ │ │ └── FlutteringLayout.java
│ │ ├── model/
│ │ │ ├── LiveService.java
│ │ │ ├── data/
│ │ │ │ ├── AppStart.java
│ │ │ │ ├── Banner.java
│ │ │ │ ├── LiveInfo.java
│ │ │ │ ├── Recommend.java
│ │ │ │ ├── Room.java
│ │ │ │ ├── RoomLine.java
│ │ │ │ └── StreamSrc.java
│ │ │ └── repository/
│ │ │ └── LiveRetrofit.java
│ │ ├── view/
│ │ │ ├── Constant.java
│ │ │ ├── activity/
│ │ │ │ ├── LiveActivity.java
│ │ │ │ └── LiveRoomActivity.java
│ │ │ ├── adapter/
│ │ │ │ ├── RecommendAdapter.java
│ │ │ │ └── RecommendChildAdapter.java
│ │ │ └── fragment/
│ │ │ ├── FullscreenFragment.java
│ │ │ ├── RoomFragment.java
│ │ │ └── VideoFragment.java
│ │ └── viewmodel/
│ │ └── LiveViewModel.java
│ └── res/
│ ├── drawable/
│ │ ├── full_room_avatar_bg.xml
│ │ ├── ic_arrow_back_black_24dp.xml
│ │ ├── ic_card_giftcard_black_24dp.xml
│ │ ├── ic_forum_black_24dp.xml
│ │ ├── ic_fullscreen_black_24dp.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_mail_black_24dp.xml
│ │ ├── ic_more_vert_black_24dp.xml
│ │ ├── ic_person_add_black_24dp.xml
│ │ ├── ic_send_black_24dp.xml
│ │ └── ic_share_black_24dp.xml
│ ├── drawable-v24/
│ │ └── ic_launcher_foreground.xml
│ ├── layout/
│ │ ├── activity_live.xml
│ │ ├── activity_live_room.xml
│ │ ├── fragment_fullscreen.xml
│ │ ├── fragment_room.xml
│ │ ├── fragment_video.xml
│ │ ├── item_remmend.xml
│ │ ├── item_remmend_child.xml
│ │ └── layout_banner.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ └── values/
│ ├── attrs.xml
│ ├── colors.xml
│ ├── strings.xml
│ └── styles.xml
└── test/
└── java/
└── me/
└── shouheng/
└── live/
└── ExampleUnitTest.java
SYMBOL INDEX (2035 symbols across 174 files)
FILE: advanced/src/androidTest/java/me/shouheng/advanced/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 21) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 24) | @Test
method testClick (line 32) | public void testClick(int id) {
FILE: advanced/src/main/java/me/shouheng/advanced/Activity2.java
class Activity2 (line 13) | public class Activity2 extends CommonActivity<Activity2Binding> {
method getLayoutResId (line 17) | @Override
method doCreateView (line 22) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/MainActivity.java
class MainActivity (line 34) | @Route(path = BaseConstants.ADVANCED_MENU)
method onServiceConnected (line 40) | @Override
method onServiceDisconnected (line 51) | @Override
method onServiceConnected (line 61) | @Override
method onServiceDisconnected (line 67) | @Override
class ReceiveMessHandler (line 72) | private static class ReceiveMessHandler extends Handler {
method handleMessage (line 73) | @Override
method getLayoutResId (line 83) | @Override
method doCreateView (line 88) | @Override
method onActivityResult (line 157) | @Override
method onDestroy (line 171) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/ModuleAdvancedApp.java
class ModuleAdvancedApp (line 11) | public class ModuleAdvancedApp extends BaseApplication {
method getContext (line 15) | public static ModuleAdvancedApp getContext() {
method onCreate (line 19) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/aidl/Note.java
class Note (line 10) | public class Note implements Parcelable {
method Note (line 16) | public Note(long id, String name) {
method Note (line 21) | protected Note(Parcel in) {
method createFromParcel (line 27) | @Override
method newArray (line 32) | @Override
method toString (line 38) | @Override
method describeContents (line 46) | @Override
method writeToParcel (line 51) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/aidl/NoteService.java
class NoteService (line 27) | public class NoteService extends Service {
method getNote (line 32) | @Override
method addNote (line 37) | @Override
method onCreate (line 43) | @Override
method onBind (line 60) | @Nullable
method onRebind (line 73) | @Override
method onUnbind (line 79) | @Override
method onDestroy (line 85) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/callback/ActResultRequest.java
class ActResultRequest (line 11) | public class ActResultRequest {
method ActResultRequest (line 20) | public ActResultRequest(AppCompatActivity activity) {
method getEventDispatchFragment (line 24) | private OnActResultEventDispatcherFragment getEventDispatchFragment(Ap...
method findEventDispatchFragment (line 39) | private OnActResultEventDispatcherFragment findEventDispatchFragment(F...
method startForResult (line 50) | public void startForResult(Intent intent, int requestCode, Callback ca...
type Callback (line 54) | public interface Callback {
method onActivityResult (line 55) | void onActivityResult(int resultCode, Intent data);
FILE: advanced/src/main/java/me/shouheng/advanced/callback/OnActResultEventDispatcherFragment.java
class OnActResultEventDispatcherFragment (line 12) | public class OnActResultEventDispatcherFragment extends Fragment {
method onCreate (line 18) | @Override
method startForResult (line 31) | public void startForResult(Intent intent, int requestCode, ActResultRe...
method onActivityResult (line 43) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/keepalive/LongLiveService.java
class LongLiveService (line 27) | public class LongLiveService extends Service {
method onCreate (line 29) | @Override
method onStartCommand (line 58) | @Override
method onBind (line 64) | @Nullable
method onUnbind (line 70) | @Override
method onRebind (line 75) | @Override
method onDestroy (line 80) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/messenger/MessengerService.java
class MessengerService (line 24) | public class MessengerService extends Service {
class MessengerHandler (line 30) | private static class MessengerHandler extends Handler {
method MessengerHandler (line 34) | MessengerHandler(Service service) {
method handleMessage (line 38) | @Override
method onBind (line 61) | @Nullable
FILE: advanced/src/main/java/me/shouheng/advanced/remote/Remote2Activity.java
class Remote2Activity (line 16) | @Route(path = BaseConstants.ADVANCED_REMOTE2)
method getLayoutResId (line 19) | @Override
method doCreateView (line 24) | @Override
FILE: advanced/src/main/java/me/shouheng/advanced/remote/RemoteActivity.java
class RemoteActivity (line 16) | @Route(path = BaseConstants.ADVANCED_REMOTE)
method getLayoutResId (line 19) | @Override
method doCreateView (line 24) | @Override
FILE: advanced/src/test/java/me/shouheng/advanced/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: animations/src/androidTest/java/me/shouheng/animations/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: animations/src/main/java/me/shouheng/animations/DrawableActivity.java
class DrawableActivity (line 14) | @Route(path = BaseConstants.ANIMATIONS_DRAWABLE)
method getLayoutResId (line 17) | @Override
method doCreateView (line 22) | @Override
FILE: animations/src/main/java/me/shouheng/animations/MainActivity.java
class MainActivity (line 24) | @Route(path = BaseConstants.ANIMATIONS_MENU)
method getLayoutResId (line 27) | @Override
method doCreateView (line 32) | @Override
method showToastWithIcon (line 44) | private void showToastWithIcon() {
method configMaterialRipple (line 59) | private void configMaterialRipple() {
method configTargetView (line 74) | private void configTargetView() {
FILE: animations/src/main/java/me/shouheng/animations/ModuleAnimationsApp.java
class ModuleAnimationsApp (line 11) | public class ModuleAnimationsApp extends BaseApplication {
method getContext (line 15) | public static ModuleAnimationsApp getContext() {
method onCreate (line 19) | @Override
FILE: animations/src/main/java/me/shouheng/animations/reveal/CircleRevealActivity.java
class CircleRevealActivity (line 15) | @Route(path = BaseConstants.ANIMATIONS_CIRCLE_REVEAL)
method getLayoutResId (line 18) | @Override
method doCreateView (line 23) | @Override
method animate (line 28) | private void animate() {
FILE: animations/src/test/java/me/shouheng/animations/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: client/app/src/androidTest/java/me/shouheng/references/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: client/app/src/main/assets/guokr.articleInline.js
function e (line 1) | function e(e){return String(e).replace(/&/g,"&").replace(/</g,"<"...
function n (line 1) | function n(){var e;if(typeof GuokrBridge=="undefined")return;e=JSON.pars...
FILE: client/app/src/main/assets/guokr.base.js
function c (line 1) | function c(a){var b=a.length,c=fa.type(a);return fa.isWindow(a)?!1:1===a...
function d (line 1) | function d(a){var b=oa[a]={};return fa.each(a.match(ha)||[],function(a,c...
function e (line 1) | function e(){Object.defineProperty(this.cache={},0,{get:function(){retur...
function f (line 1) | function f(a,c,d){var e;if(d===b&&1===a.nodeType)if(e="data-"+c.replace(...
function g (line 1) | function g(){return!0}
function h (line 1) | function h(){return!1}
function i (line 1) | function i(){try{return T.activeElement}catch(a){}}
function j (line 1) | function j(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}
function k (line 1) | function k(a,b,c){if(fa.isFunction(b))return fa.grep(a,function(a,d){ret...
function l (line 1) | function l(a,b){return fa.nodeName(a,"table")&&fa.nodeName(1===b.nodeTyp...
function m (line 1) | function m(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}
function n (line 1) | function n(a){var b=Na.exec(a.type);return b?a.type=b[1]:a.removeAttribu...
function o (line 1) | function o(a,b){for(var c=a.length,d=0;c>d;d++)qa.set(a[d],"globalEval",...
function p (line 1) | function p(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(qa.hasData(a)&...
function q (line 1) | function q(a,c){var d=a.getElementsByTagName?a.getElementsByTagName(c||"...
function r (line 1) | function r(a,b){var c=b.nodeName.toLowerCase();"input"===c&&Ka.test(a.ty...
function s (line 1) | function s(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b...
function t (line 1) | function t(a,b){return a=b||a,"none"===fa.css(a,"display")||!fa.contains...
function u (line 1) | function u(b){return a.getComputedStyle(b,null)}
function v (line 1) | function v(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style...
function w (line 1) | function w(a,b,c){var d=Ua.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2...
function x (line 1) | function x(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b...
function y (line 1) | function y(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=...
function z (line 1) | function z(a){var b=T,c=Xa[a];return c||(c=A(a,b),"none"!==c&&c||(Ra=(Ra...
function A (line 1) | function A(a,b){var c=fa(b.createElement(a)).appendTo(b.body),d=fa.css(c...
function B (line 1) | function B(a,b,c,d){var e;if(fa.isArray(b))fa.each(b,function(b,e){c||bb...
function C (line 1) | function C(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d...
function D (line 1) | function D(a,b,c,d){function e(h){var i;return f[h]=!0,fa.each(a[h]||[],...
function E (line 1) | function E(a,c){var d,e,f=fa.ajaxSettings.flatOptions||{};for(d in c)c[d...
function F (line 1) | function F(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;"*"===j[0];...
function G (line 1) | function G(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for...
function H (line 1) | function H(){return setTimeout(function(){Bb=b}),Bb=fa.now()}
function I (line 1) | function I(a,b,c){for(var d,e=(Hb[b]||[]).concat(Hb["*"]),f=0,g=e.length...
function J (line 1) | function J(a,b,c){var d,e,f=0,g=Gb.length,h=fa.Deferred().always(functio...
function K (line 1) | function K(a,b){var c,d,e,f,g;for(c in a)if(d=fa.camelCase(c),e=b[d],f=a...
function L (line 1) | function L(a,c,d){var e,f,g,h,i,j,k=this,l={},m=a.style,n=a.nodeType&&t(...
function M (line 1) | function M(a,b,c,d,e){return new M.prototype.init(a,b,c,d,e)}
function N (line 1) | function N(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=$a[e],d[...
function O (line 1) | function O(a){return fa.isWindow(a)?a:9===a.nodeType&&a.defaultView}
function c (line 1) | function c(a,b,c,d){var e,f,g,h,i,j,k,l,o,p;if((b?b.ownerDocument||b:O)!...
function d (line 1) | function d(){function a(c,d){return b.push(c+=" ")>z.cacheLength&&delete...
function e (line 1) | function e(a){return a[N]=!0,a}
function f (line 1) | function f(a){var b=G.createElement("div");try{return!!a(b)}catch(c){ret...
function g (line 1) | function g(a,b){for(var c=a.split("|"),d=a.length;d--;)z.attrHandle[c[d]...
function h (line 1) | function h(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sour...
function i (line 1) | function i(a){return function(b){var c=b.nodeName.toLowerCase();return"i...
function j (line 1) | function j(a){return function(b){var c=b.nodeName.toLowerCase();return("...
function k (line 1) | function k(a){return e(function(b){return b=+b,e(function(c,d){for(var e...
function l (line 1) | function l(){}
function m (line 1) | function m(a,b){var d,e,f,g,h,i,j,k=S[a+" "];if(k)return b?0:k.slice(0);...
function n (line 1) | function n(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}
function o (line 1) | function o(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=Q++;return b.first...
function p (line 1) | function p(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)...
function q (line 1) | function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f...
function r (line 1) | function r(a,b,c,d,f,g){return d&&!d[N]&&(d=r(d)),f&&!f[N]&&(f=r(f,g)),e...
function s (line 1) | function s(a){for(var b,c,d,e=a.length,f=z.relative[a[0].type],g=f||z.re...
function t (line 1) | function t(a,b){var d=0,f=b.length>0,g=a.length>0,h=function(e,h,i,j,k){...
function u (line 1) | function u(a,b,d){for(var e=0,f=b.length;f>e;e++)c(a,b[e],d);return d}
function v (line 1) | function v(a,b,c,d){var e,f,g,h,i,j=m(a);if(!d&&1===j.length){if(f=j[0]=...
function d (line 3) | function d(a,c,d,h){var j,l,s,t,v,x=c;2!==u&&(u=2,i&&clearTimeout(i),e=b...
function isFunction (line 3) | function isFunction(a){return"[object Function]"===ostring.call(a)}
function isArray (line 3) | function isArray(a){return"[object Array]"===ostring.call(a)}
function each (line 3) | function each(a,b){if(a){var c;for(c=0;c<a.length&&(!a[c]||!b(a[c],c,a))...
function eachReverse (line 3) | function eachReverse(a,b){if(a){var c;for(c=a.length-1;c>-1&&(!a[c]||!b(...
function hasProp (line 3) | function hasProp(a,b){return hasOwn.call(a,b)}
function getOwn (line 3) | function getOwn(a,b){return hasProp(a,b)&&a[b]}
function eachProp (line 3) | function eachProp(a,b){var c;for(c in a)if(hasProp(a,c)&&b(a[c],c))break}
function mixin (line 3) | function mixin(a,b,c,d){return b&&eachProp(b,function(b,e){(c||!hasProp(...
function bind (line 3) | function bind(a,b){return function(){return b.apply(a,arguments)}}
function scripts (line 3) | function scripts(){return document.getElementsByTagName("script")}
function defaultOnError (line 3) | function defaultOnError(a){throw a}
function getGlobal (line 3) | function getGlobal(a){if(!a)return a;var b=global;return each(a.split("....
function makeError (line 3) | function makeError(a,b,c,d){var e=new Error(b+"\nhttp://requirejs.org/do...
function newContext (line 3) | function newContext(a){function b(a){var b,c;for(b=0;b<a.length;b++)if(c...
function getInteractiveScript (line 4) | function getInteractiveScript(){return interactiveScript&&"interactive"=...
FILE: client/app/src/main/java/me/shouheng/references/MyApplication.java
class MyApplication (line 17) | public class MyApplication extends BaseApplication {
method getContext (line 21) | public static MyApplication getContext() {
method onCreate (line 25) | @Override
FILE: client/app/src/main/java/me/shouheng/references/view/intro/AppIntroActivity.java
class AppIntroActivity (line 10) | @Route(path = BaseConstants.INTRO)
method init (line 13) | @Override
method onSkipPressed (line 21) | @Override
method onDonePressed (line 26) | @Override
method onBackPressed (line 31) | @Override
FILE: client/app/src/main/java/me/shouheng/references/view/intro/IntroFragment.java
class IntroFragment (line 16) | public class IntroFragment extends Fragment {
method onCreateView (line 24) | @Override
FILE: client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide1.java
class IntroSlide1 (line 10) | public class IntroSlide1 extends IntroFragment {
method onActivityCreated (line 12) | @Override
FILE: client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide2.java
class IntroSlide2 (line 8) | public class IntroSlide2 extends IntroFragment {
method onActivityCreated (line 10) | @Override
FILE: client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide3.java
class IntroSlide3 (line 8) | public class IntroSlide3 extends IntroFragment {
method onActivityCreated (line 10) | @Override
FILE: client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide4.java
class IntroSlide4 (line 8) | public class IntroSlide4 extends IntroFragment {
method onActivityCreated (line 10) | @Override
FILE: client/app/src/main/java/me/shouheng/references/view/main/MainActivity.java
class MainActivity (line 40) | public class MainActivity extends CommonActivity<ActivityMainBinding> {
method getLayoutResId (line 42) | @Override
method doCreateView (line 47) | @Override
method joinQQGroup (line 80) | public boolean joinQQGroup(String key) {
method setupDrawer (line 93) | private void setupDrawer(Bundle savedInstanceState) {
method createShortcut (line 269) | private void createShortcut(Context context) {
method createPinnedShortcut (line 283) | private void createPinnedShortcut(Context context) {
FILE: client/app/src/main/java/me/shouheng/references/viewmodel/MainViewModel.java
class MainViewModel (line 11) | public class MainViewModel extends AndroidViewModel {
method MainViewModel (line 13) | @Inject
FILE: client/app/src/test/java/me/shouheng/references/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: commons/src/androidTest/java/me/shouheng/commons/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: commons/src/main/java/me/shouheng/commons/BaseApplication.java
class BaseApplication (line 19) | public abstract class BaseApplication extends Application {
method getContext (line 23) | public static BaseApplication getContext() {
method onCreate (line 27) | @Override
FILE: commons/src/main/java/me/shouheng/commons/config/BaseConstants.java
type BaseConstants (line 5) | public interface BaseConstants {
FILE: commons/src/main/java/me/shouheng/commons/config/Configs.java
type Configs (line 5) | public interface Configs {
FILE: commons/src/main/java/me/shouheng/commons/di/AppComponent.java
type AppComponent (line 19) | @Singleton
type Builder (line 23) | @Component.Builder
method application (line 26) | @BindsInstance Builder application(Application application);
method build (line 28) | AppComponent build();
FILE: commons/src/main/java/me/shouheng/commons/di/module/AppModule.java
class AppModule (line 15) | @Module
method provideOkHttpClient (line 18) | @Provides
FILE: commons/src/main/java/me/shouheng/commons/model/Resource.java
class Resource (line 11) | public class Resource<T> {
method Resource (line 26) | private Resource(@NonNull Status status, @Nullable T data, @Nullable S...
method success (line 32) | public static <T> Resource<T> success(@NonNull T data) {
method error (line 36) | public static <T> Resource<T> error(String msg, @Nullable T data) {
method loading (line 40) | public static <T> Resource<T> loading(@Nullable T data) {
method getUdf1 (line 44) | public Long getUdf1() {
method setUdf1 (line 48) | public void setUdf1(Long udf1) {
method toString (line 52) | @Override
FILE: commons/src/main/java/me/shouheng/commons/model/Status.java
type Status (line 5) | public enum Status {
FILE: commons/src/main/java/me/shouheng/commons/rxbus/RxBus.java
class RxBus (line 19) | public class RxBus {
method getRxBus (line 27) | public static RxBus getRxBus() {
method post (line 38) | public void post(Object o){
method getObservable (line 42) | public <T>Flowable<T> getObservable(Class<T> type){
method doSubscribe (line 46) | public <T> Disposable doSubscribe(Class<T> type, Consumer<T> next, Con...
method hasObservers (line 53) | public boolean hasObservers() {
method addSubscription (line 57) | public void addSubscription(Object o, Disposable disposable) {
method unSubscribe (line 68) | public void unSubscribe(Object o) {
FILE: commons/src/main/java/me/shouheng/commons/tools/ColorUtils.java
class ColorUtils (line 15) | public class ColorUtils {
method tintDrawable (line 19) | public static Drawable tintDrawable(@NonNull Drawable drawable, @Color...
method calStatusBarColor (line 25) | public static int calStatusBarColor(int color) {
method calStatusBarColor (line 29) | public static int calStatusBarColor(int color, int alpha) {
method parseColor (line 40) | public static int parseColor(String colorHex, @ColorInt int defaultVal...
method fadeColor (line 48) | public static @ColorInt int fadeColor(@ColorInt int color, @FloatRange...
method getBlackWhiteColor (line 52) | public static int getBlackWhiteColor(int color) {
FILE: commons/src/main/java/me/shouheng/commons/tools/FragmentHelper.java
class FragmentHelper (line 11) | public class FragmentHelper {
method replace (line 13) | public static void replace(AppCompatActivity activity, Fragment fragme...
method replaceWithCallback (line 17) | public static void replaceWithCallback(AppCompatActivity activity, Fra...
method replace (line 21) | public static void replace(AppCompatActivity activity, android.app.Fra...
method replaceWithCallback (line 25) | public static void replaceWithCallback(AppCompatActivity activity, and...
method replace (line 29) | private static void replace(AppCompatActivity activity, android.app.Fr...
method replace (line 37) | private static void replace(AppCompatActivity activity, Fragment fragm...
FILE: commons/src/main/java/me/shouheng/commons/tools/LogUtils.java
class LogUtils (line 10) | public class LogUtils {
method v (line 22) | public static void v(Object obj) {
method v (line 26) | public static void v(String tag, Object obj) {
method d (line 30) | public static void d(Object obj) {
method d (line 34) | public static void d(String tag, Object obj) {
method i (line 38) | public static void i(Object obj) {
method i (line 42) | public static void i(String tag, Object obj) {
method w (line 46) | public static void w(Object obj) {
method w (line 50) | public static void w(String tag, Object obj) {
method e (line 54) | public static void e(Object obj) {
method e (line 58) | public static void e(String tag, Object obj) {
method logs (line 62) | private static void logs(int logType, String tagStr, Object obj) {
FILE: commons/src/main/java/me/shouheng/commons/tools/NetworkUtils.java
class NetworkUtils (line 9) | public class NetworkUtils {
method isNetworkAvailable (line 11) | public static boolean isNetworkAvailable(Context context){
method isWifi (line 18) | public static boolean isWifi(Context mContext) {
FILE: commons/src/main/java/me/shouheng/commons/tools/PalmUtils.java
class PalmUtils (line 17) | public class PalmUtils {
method isJellyBeanMR1 (line 24) | public static boolean isJellyBeanMR1() {
method isJellyBeanMR2 (line 32) | public static boolean isJellyBeanMR2() {
method isKitKat (line 40) | public static boolean isKitKat(){
method isLollipop (line 48) | public static boolean isLollipop() {
method isMarshmallow (line 56) | public static boolean isMarshmallow() {
method isAlive (line 63) | public static boolean isAlive(Activity activity) {
method isAlive (line 67) | public static boolean isAlive(Fragment fragment) {
method isAlive (line 71) | public static boolean isAlive(android.app.Fragment fragment) {
method getColorCompact (line 77) | public static int getColorCompact(@ColorRes int colorRes) {
method getStringCompact (line 81) | public static String getStringCompact(@StringRes int stringRes) {
method getDrawableCompact (line 85) | public static Drawable getDrawableCompact(@DrawableRes int drawableRes) {
method getPackageName (line 91) | public static String getPackageName(){
FILE: commons/src/main/java/me/shouheng/commons/tools/StringUtils.java
class StringUtils (line 20) | public class StringUtils {
method ListToString (line 35) | public static String ListToString(List<?> list) {
method MapToString (line 58) | public static String MapToString(Map<?, ?> map) {
method StringToMap (line 80) | public static Map<String, Object> StringToMap(String mapText) {
method StringToList (line 107) | public static List<Object> StringToList(String listText) {
method isChinese (line 131) | public static boolean isChinese(char c) {
method isChinese (line 141) | public static boolean isChinese(String strName) {
method hasNotChinese (line 152) | public static boolean hasNotChinese(String strName) {
method isNumeric (line 164) | public static boolean isNumeric(String str) {
method isEmail (line 169) | public static boolean isEmail(String emailStr) {
method isPhoneNumber (line 174) | public static boolean isPhoneNumber(@NonNull String phone) {
method parseInteger (line 181) | public static int parseInteger(String intString, int defaultValue) {
method parseDouble (line 191) | public static double parseDouble(String intString, double defaultValue) {
method formatString (line 203) | public static String formatString(@StringRes int stringRes, Object ......
method getStringCompact (line 209) | public static String getStringCompact(@StringRes int stringRes) {
FILE: commons/src/main/java/me/shouheng/commons/tools/TimeUtils.java
class TimeUtils (line 20) | public class TimeUtils {
type DateFormat (line 24) | public enum DateFormat {
method DateFormat (line 31) | DateFormat(String format) {
method formatDate (line 38) | public static String formatDate(long millis, DateFormat dateFormat){
method formatDate (line 44) | public static String formatDate(Date date, DateFormat dateFormat) {
method from (line 48) | public static Date from(String strDate) {
method getLongDate (line 62) | public static String getLongDate(Context context, Date date){
method getLongDateWithWeekday (line 68) | public static String getLongDateWithWeekday(Context context, Date date){
method getLongDateTime (line 74) | public static String getLongDateTime(Context context, Date date) {
method getShortDateWithWeekday (line 83) | public static String getShortDateWithWeekday(Context context, Calendar...
method getShortDate (line 100) | public static String getShortDate(Context context, Calendar calendar){
method getShortDate (line 110) | public static String getShortDate(Context context, Date date){
method getNoMonthDay (line 122) | public static String getNoMonthDay(Context context, Date date) {
method getDateTimeShort (line 138) | public static String getDateTimeShort(Context mContext, Date date) {
method getShortTime (line 158) | public static String getShortTime(Context context, int time){
method getShortTime (line 164) | public static String getShortTime(Context context, int hour, int minute){
method getShortTime (line 171) | public static String getShortTime(Context mContext, Date time){
method getPrettyTime (line 181) | public static String getPrettyTime(Date date) {
method getPrettyTime (line 188) | private static String getPrettyTime(Date date, Locale locale) {
method getDaysOfMonth (line 210) | public static int getDaysOfMonth(int year, int month){
method getStartAndEndMillisOfMonth (line 229) | public static long[] getStartAndEndMillisOfMonth(int year, int month){
method getWeekCalendarSubTitle (line 256) | public static String getWeekCalendarSubTitle(
method sevenDaysAgo (line 268) | public static Calendar sevenDaysAgo() {
method getMillisTodayStart (line 287) | public static long getMillisTodayStart(){
method getMillisTodayEnd (line 300) | public static long getMillisTodayEnd() {
method getStandardMillisTomorrow (line 313) | public static long getStandardMillisTomorrow(){
method getDayOfWeek (line 328) | public static int getDayOfWeek(int year, int month, int day){
method getStartDate (line 340) | public static Date getStartDate(int year, int month, int day){
method getEndDate (line 356) | public static Date getEndDate(int year, int month, int day){
method getTodayDate (line 377) | public static Calendar getTodayDate(){
method getTomorrowDate (line 386) | public static Calendar getTomorrowDate(){
method daysSpan (line 402) | public static int daysSpan(Date start, Date end) {
method getRecordTime (line 411) | public static String getRecordTime(long recordMillis) {
method getRealProgress (line 435) | public static String getRealProgress(long startMillis, long endMillis){
method getHour (line 445) | public static int getHour(int timeMillis) {
method getMinute (line 449) | public static int getMinute(int timeMillis) {
method getTimeInMillis (line 453) | public static int getTimeInMillis(int hour, int minute){
method getTimeLength (line 457) | public static String getTimeLength(Context context, long startMillis, ...
method calTimeToGo (line 480) | public static int calTimeToGo() {
method getShuXiang (line 497) | public static String getShuXiang(int year){
method getGanZhi (line 520) | public static String getGanZhi(int year){
method isLeapYear (line 549) | private static boolean isLeapYear(int year){
FILE: commons/src/main/java/me/shouheng/commons/tools/ToastUtils.java
class ToastUtils (line 8) | public class ToastUtils {
method makeToast (line 12) | public static void makeToast(String msg) {
method makeToast (line 22) | public static void makeToast(@StringRes int msgRes) {
FILE: commons/src/main/java/me/shouheng/commons/tools/ViewUtils.java
class ViewUtils (line 19) | public class ViewUtils {
method getStatusBarHeight (line 21) | public static int getStatusBarHeight(Context context) {
method dp2Px (line 27) | public static int dp2Px(float dpValues){
method sp2Px (line 32) | public static int sp2Px(float spValues){
method getDisplayMetrics (line 37) | public static DisplayMetrics getDisplayMetrics() {
method getWindowWidth (line 41) | public static int getWindowWidth(Context context){
method getWindowHeight (line 48) | public static int getWindowHeight(Context context){
method getWindowSize (line 55) | public static Point getWindowSize(Context context){
method getScreenOrientation (line 62) | public static int getScreenOrientation(Context context) {
method getStatusBarHeight (line 66) | public static int getStatusBarHeight(Resources r) {
method getRootView (line 73) | public static View getRootView(Activity context) {
method setAlpha (line 77) | public static void setAlpha(View v, @FloatRange(from = 0, to = 1) floa...
method getNavigationBarHeight (line 87) | public static int getNavigationBarHeight(Context context) {
FILE: commons/src/main/java/me/shouheng/commons/tools/glide/MyAppGlideModule.java
class MyAppGlideModule (line 28) | @GlideModule
method applyOptions (line 36) | @Override
method registerComponents (line 41) | @Override
method isManifestParsingEnabled (line 58) | @Override
FILE: commons/src/main/java/me/shouheng/commons/tools/permission/OnGetPermissionCallback.java
type OnGetPermissionCallback (line 5) | public interface OnGetPermissionCallback {
method onGetPermission (line 6) | void onGetPermission();
FILE: commons/src/main/java/me/shouheng/commons/tools/permission/PermissionUtils.java
class PermissionUtils (line 18) | public class PermissionUtils {
method checkStoragePermission (line 20) | public static <T extends BaseActivity> void checkStoragePermission(@No...
method checkPhonePermission (line 24) | public static <T extends BaseActivity> void checkPhonePermission(@NonN...
method checkLocationPermission (line 28) | public static <T extends BaseActivity> void checkLocationPermission(@N...
method checkRecordPermission (line 32) | public static <T extends BaseActivity> void checkRecordPermission(@Non...
method checkSmsPermission (line 36) | public static <T extends BaseActivity> void checkSmsPermission(@NonNul...
method checkSensorsPermission (line 40) | @TargetApi(Build.VERSION_CODES.KITKAT_WATCH)
method checkContactsPermission (line 45) | public static <T extends BaseActivity> void checkContactsPermission(@N...
method checkCameraPermission (line 49) | public static <T extends BaseActivity> void checkCameraPermission(@Non...
method checkCalendarPermission (line 53) | public static <T extends BaseActivity> void checkCalendarPermission(@N...
method checkPermission (line 57) | private static <T extends BaseActivity> void checkPermission(@NonNull ...
method getPermissionName (line 68) | public static String getPermissionName(Context context, int requestCod...
FILE: commons/src/main/java/me/shouheng/commons/tools/theme/SystemUiVisibilityUtil.java
class SystemUiVisibilityUtil (line 10) | @TargetApi(Build.VERSION_CODES.KITKAT)
method getSystemVisibility (line 29) | public static int getSystemVisibility() {
method exit (line 37) | public static void exit(Activity activity) {
method addFlags (line 43) | private static void addFlags(View decorView, int flags) {
method enter (line 47) | public static void enter(Activity activity) {
method clearFlags (line 53) | private static void clearFlags(View view, int flags) {
FILE: commons/src/main/java/me/shouheng/commons/tools/theme/ThemeUtils.java
class ThemeUtils (line 18) | public class ThemeUtils {
method customStatusBar (line 28) | public static void customStatusBar(Activity activity) {
method setStatusBarColor (line 50) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
method hideSystemUI (line 57) | public static void hideSystemUI(Activity activity) {
FILE: commons/src/main/java/me/shouheng/commons/view/activity/BaseActivity.java
class BaseActivity (line 23) | public abstract class BaseActivity extends AppCompatActivity {
method setOnGetPermissionCallback (line 27) | public void setOnGetPermissionCallback(OnGetPermissionCallback onGetPe...
method onCreate (line 31) | @Override
method onRequestPermissionsResult (line 37) | @Override
method showPermissionSettingDialog (line 58) | private void showPermissionSettingDialog(int requestCode) {
method toSetPermission (line 70) | private void toSetPermission() {
method getToastMessage (line 83) | private String getToastMessage(int requestCode) {
method getContext (line 93) | public BaseActivity getContext() {
FILE: commons/src/main/java/me/shouheng/commons/view/activity/CommonActivity.java
class CommonActivity (line 21) | public abstract class CommonActivity<T extends ViewDataBinding> extends ...
method getLayoutResId (line 25) | protected abstract int getLayoutResId();
method doCreateView (line 27) | protected abstract void doCreateView(Bundle savedInstanceState);
method beforeCreate (line 29) | protected void beforeCreate(Bundle savedInstanceState) { }
method onCreate (line 31) | @Override
method getBinding (line 48) | protected final T getBinding() {
method getViewModel (line 52) | protected <VM extends ViewModel> VM getViewModel(@NonNull Class<VM> mo...
method getCurrentFragment (line 56) | protected Fragment getCurrentFragment(@IdRes int resId) {
method startActivity (line 60) | public void startActivity(Class<? extends Activity> activity) {
method startActivityForResult (line 64) | public void startActivityForResult(Class<? extends Activity> activity,...
method superOnBackPressed (line 70) | public void superOnBackPressed() {
method postEvent (line 74) | protected void postEvent(Object object) {
method addSubscription (line 78) | protected <M> void addSubscription(Class<M> eventType, Consumer<M> act...
method addSubscription (line 83) | protected <M> void addSubscription(Class<M> eventType, Consumer<M> act...
method onDestroy (line 88) | @Override
FILE: commons/src/main/java/me/shouheng/commons/view/activity/CommonDaggerActivity.java
class CommonDaggerActivity (line 12) | public abstract class CommonDaggerActivity<T extends ViewDataBinding> ex...
method beforeCreate (line 14) | @Override
FILE: commons/src/main/java/me/shouheng/commons/view/activity/UMengActivity.java
class UMengActivity (line 11) | public class UMengActivity extends BaseActivity {
method onCreate (line 13) | @Override
FILE: commons/src/main/java/me/shouheng/commons/view/fragment/CommonDaggerFragment.java
class CommonDaggerFragment (line 16) | public abstract class CommonDaggerFragment<T extends ViewDataBinding> ex...
method onCreate (line 20) | @Override
method getLifecycle (line 26) | @Override
FILE: commons/src/main/java/me/shouheng/commons/view/fragment/CommonFragment.java
class CommonFragment (line 24) | public abstract class CommonFragment<T extends ViewDataBinding> extends ...
method getLayoutResId (line 28) | protected abstract int getLayoutResId();
method doCreateView (line 30) | protected abstract void doCreateView(Bundle savedInstanceState);
method onCreateView (line 34) | @Override
method getRoot (line 52) | protected View getRoot() {
method getBinding (line 56) | protected final T getBinding() {
method setStatusBarColor (line 60) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
method onBackPressed (line 67) | public void onBackPressed() {
method postEvent (line 74) | protected void postEvent(Object object) {
method addSubscription (line 78) | protected <M> void addSubscription(Class<M> eventType, Consumer<M> act...
method addSubscription (line 83) | protected <M> void addSubscription(Class<M> eventType, Consumer<M> act...
method onDestroy (line 88) | @Override
FILE: commons/src/main/java/me/shouheng/commons/view/widget/CircleImageView.java
class CircleImageView (line 27) | public class CircleImageView extends AppCompatImageView {
method CircleImageView (line 64) | public CircleImageView(Context context) {
method CircleImageView (line 70) | public CircleImageView(Context context, AttributeSet attrs) {
method CircleImageView (line 74) | public CircleImageView(Context context, AttributeSet attrs, int defSty...
method init (line 88) | private void init() {
method getScaleType (line 98) | @Override
method setScaleType (line 103) | @Override
method setAdjustViewBounds (line 110) | @Override
method onDraw (line 117) | @Override
method onSizeChanged (line 129) | @Override
method getBorderColor (line 135) | public int getBorderColor() {
method setBorderColor (line 139) | public void setBorderColor(int borderColor) {
method setBorderColorResource (line 149) | public void setBorderColorResource(@ColorRes int borderColorRes) {
method getBorderWidth (line 153) | public int getBorderWidth() {
method setBorderWidth (line 157) | public void setBorderWidth(int borderWidth) {
method isBorderOverlay (line 166) | public boolean isBorderOverlay() {
method setBorderOverlay (line 170) | public void setBorderOverlay(boolean borderOverlay) {
method setImageBitmap (line 179) | @Override
method setImageDrawable (line 186) | @Override
method setImageResource (line 193) | @Override
method setFillingCircleColor (line 201) | public void setFillingCircleColor(int color) {
method setImageURI (line 208) | @Override
method setColorFilter (line 215) | @Override
method getBitmapFromDrawable (line 226) | private Bitmap getBitmapFromDrawable(Drawable drawable) {
method setup (line 253) | private void setup() {
method updateShaderMatrix (line 289) | private void updateShaderMatrix() {
FILE: commons/src/main/java/me/shouheng/commons/view/widget/DividerItemDecoration.java
class DividerItemDecoration (line 16) | public class DividerItemDecoration extends RecyclerView.ItemDecoration {
method DividerItemDecoration (line 28) | public DividerItemDecoration(Context context, int orientation, boolean...
method DividerItemDecoration (line 35) | public DividerItemDecoration(Context context, int orientation, int res...
method setOrientation (line 40) | public void setOrientation(int orientation) {
method onDraw (line 47) | @Override
method drawVertical (line 56) | private void drawVertical(Canvas c, RecyclerView parent) {
method drawHorizontal (line 71) | private void drawHorizontal(Canvas c, RecyclerView parent) {
method getItemOffsets (line 87) | @Override
FILE: commons/src/main/java/me/shouheng/commons/view/widget/DragSortRecycler.java
class DragSortRecycler (line 14) | public class DragSortRecycler extends RecyclerView.ItemDecoration implem...
method onScrollStateChanged (line 27) | @Override
method onScrolled (line 32) | @Override
method debugLog (line 51) | private void debugLog(String log) {
method getScrollListener (line 56) | public RecyclerView.OnScrollListener getScrollListener() {
method setOnItemMovedListener (line 63) | public void setOnItemMovedListener(OnItemMovedListener swif) {
method setViewHandleId (line 67) | public void setViewHandleId(int id) {
method setLeftDragArea (line 71) | public void setLeftDragArea(int w) {
method setFloatingAlpha (line 75) | public void setFloatingAlpha(float a) {
method setFloatingBgColor (line 79) | public void setFloatingBgColor(int c) {
method setAutoScrollWindow (line 87) | public void setAutoScrollWindow(float w) {
method setAutoScrollSpeed (line 94) | public void setAutoScrollSpeed(float speed) {
method getItemOffsets (line 98) | @Override
method getNewPostion (line 167) | private int getNewPostion(RecyclerView rv) {
method onInterceptTouchEvent (line 213) | @Override
method onRequestDisallowInterceptTouchEvent (line 286) | @Override
method onTouchEvent (line 291) | @Override
method setIsDragging (line 339) | private void setIsDragging(final boolean dragging) {
method setOnDragStateChangedListener (line 352) | public void setOnDragStateChangedListener(final OnDragStateChangedList...
method onDrawOver (line 356) | @Override
method canDragOver (line 370) | protected boolean canDragOver(int position) {
method createFloatingBitmap (line 374) | private BitmapDrawable createFloatingBitmap(View v) {
type OnItemMovedListener (line 389) | public interface OnItemMovedListener {
method onItemMoved (line 390) | void onItemMoved(int from, int to);
type OnDragStateChangedListener (line 394) | public interface OnDragStateChangedListener {
method onDragStart (line 395) | void onDragStart();
method onDragStop (line 397) | void onDragStop();
FILE: commons/src/main/java/me/shouheng/commons/view/widget/EmptyView.java
class EmptyView (line 21) | public class EmptyView extends LinearLayout {
method EmptyView (line 27) | public EmptyView(Context context) {
method EmptyView (line 31) | public EmptyView(Context context, @Nullable AttributeSet attrs) {
method EmptyView (line 36) | public EmptyView(Context context, @Nullable AttributeSet attrs, int de...
method init (line 41) | private void init(Context context, AttributeSet attributeSet) {
method setTitle (line 70) | public void setTitle(String title) {
method setSubTitle (line 75) | public void setSubTitle(String subTitle) {
method setIcon (line 80) | public void setIcon(@DrawableRes int mIcon) {
method setIcon (line 88) | public void setIcon(Drawable drawable) {
FILE: commons/src/main/java/me/shouheng/commons/view/widget/SpaceItemDecoration.java
class SpaceItemDecoration (line 9) | public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
method SpaceItemDecoration (line 13) | public SpaceItemDecoration(int leftDp, int upDp, int rightDp, int down...
method getItemOffsets (line 20) | @Override
FILE: commons/src/main/java/me/shouheng/commons/view/widget/SquareFrameLayout.java
class SquareFrameLayout (line 7) | public class SquareFrameLayout extends FrameLayout {
method SquareFrameLayout (line 9) | public SquareFrameLayout(Context context, AttributeSet attrs, int defS...
method SquareFrameLayout (line 13) | public SquareFrameLayout(Context context, AttributeSet attrs) {
method SquareFrameLayout (line 17) | public SquareFrameLayout(Context context) {
method onMeasure (line 21) | @SuppressWarnings("unused")
FILE: commons/src/main/java/me/shouheng/commons/view/widget/SquareImageView.java
class SquareImageView (line 7) | public class SquareImageView extends AppCompatImageView {
method SquareImageView (line 9) | public SquareImageView(Context context) {
method SquareImageView (line 13) | public SquareImageView(Context context, AttributeSet attrs) {
method SquareImageView (line 17) | public SquareImageView(Context context, AttributeSet attrs, int defSty...
method onMeasure (line 21) | @Override
FILE: commons/src/test/java/me/shouheng/commons/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: eyepetizer/src/androidTest/java/me/shouheng/eyepetizer/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/ModuleEyepetizerApp.java
class ModuleEyepetizerApp (line 11) | public class ModuleEyepetizerApp extends BaseApplication {
method getContext (line 15) | public static ModuleEyepetizerApp getContext() {
method onCreate (line 19) | @Override
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/base/BasePresenter.java
type BasePresenter (line 7) | public interface BasePresenter {
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/base/BaseView.java
type BaseView (line 7) | public interface BaseView {
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/contract/HomeContract.java
type HomeContract (line 13) | public interface HomeContract {
type IView (line 15) | interface IView extends BaseView {
method setFirstPage (line 16) | void setFirstPage(List<HomeBean.IssueList.ItemList> itemLists);
method setNextPage (line 17) | void setNextPage(List<HomeBean.IssueList.ItemList> itemLists);
method onError (line 18) | void onError(String msg);
type IPresenter (line 21) | interface IPresenter extends BasePresenter {
method requestFirstPage (line 22) | void requestFirstPage();
method requestNextPage (line 23) | void requestNextPage();
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/model/HomeModel.java
class HomeModel (line 11) | public class HomeModel {
method getFirstHomeData (line 13) | public Observable<HomeBean> getFirstHomeData() {
method getMoreHomeData (line 17) | public Observable<HomeBean> getMoreHomeData(String url) {
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/model/bean/HomeBean.java
class HomeBean (line 9) | public class HomeBean {
method getNextPageUrl (line 25) | public String getNextPageUrl() {
method setNextPageUrl (line 29) | public void setNextPageUrl(String nextPageUrl) {
method getNextPublishTime (line 33) | public long getNextPublishTime() {
method setNextPublishTime (line 37) | public void setNextPublishTime(long nextPublishTime) {
method getNewestIssueType (line 41) | public String getNewestIssueType() {
method setNewestIssueType (line 45) | public void setNewestIssueType(String newestIssueType) {
method getDialog (line 49) | public Object getDialog() {
method setDialog (line 53) | public void setDialog(Object dialog) {
method getIssueList (line 57) | public List<IssueList> getIssueList() {
method setIssueList (line 61) | public void setIssueList(List<IssueList> issueList) {
class IssueList (line 65) | public static class IssueList {
method getReleaseTime (line 82) | public long getReleaseTime() {
method setReleaseTime (line 86) | public void setReleaseTime(long releaseTime) {
method getType (line 90) | public String getType() {
method setType (line 94) | public void setType(String type) {
method getDate (line 98) | public long getDate() {
method setDate (line 102) | public void setDate(long date) {
method getPublishTime (line 106) | public long getPublishTime() {
method setPublishTime (line 110) | public void setPublishTime(long publishTime) {
method getCount (line 114) | public int getCount() {
method setCount (line 118) | public void setCount(int count) {
method getItemList (line 122) | public List<ItemList> getItemList() {
method setItemList (line 126) | public void setItemList(List<ItemList> itemList) {
class ItemList (line 130) | public static class ItemList {
method getType (line 145) | public String getType() {
method setType (line 149) | public void setType(String type) {
method getData (line 153) | public Data getData() {
method setData (line 157) | public void setData(Data data) {
method getTag (line 161) | public Object getTag() {
method setTag (line 165) | public void setTag(Object tag) {
method getId (line 169) | public int getId() {
method setId (line 173) | public void setId(int id) {
method getAdIndex (line 177) | public int getAdIndex() {
method setAdIndex (line 181) | public void setAdIndex(int adIndex) {
class Data (line 185) | public static class Data {
method getDataType (line 276) | public String getDataType() {
method setDataType (line 280) | public void setDataType(String dataType) {
method getId (line 284) | public int getId() {
method setId (line 288) | public void setId(int id) {
method getTitle (line 292) | public String getTitle() {
method setTitle (line 296) | public void setTitle(String title) {
method getDescription (line 300) | public String getDescription() {
method setDescription (line 304) | public void setDescription(String description) {
method getLibrary (line 308) | public String getLibrary() {
method setLibrary (line 312) | public void setLibrary(String library) {
method getConsumption (line 316) | public Consumption getConsumption() {
method setConsumption (line 320) | public void setConsumption(Consumption consumption) {
method getResourceType (line 324) | public String getResourceType() {
method setResourceType (line 328) | public void setResourceType(String resourceType) {
method getSlogan (line 332) | public String getSlogan() {
method setSlogan (line 336) | public void setSlogan(String slogan) {
method getProvider (line 340) | public Provider getProvider() {
method setProvider (line 344) | public void setProvider(Provider provider) {
method getCategory (line 348) | public String getCategory() {
method setCategory (line 352) | public void setCategory(String category) {
method getAuthor (line 356) | public Author getAuthor() {
method setAuthor (line 360) | public void setAuthor(Author author) {
method getCover (line 364) | public Cover getCover() {
method setCover (line 368) | public void setCover(Cover cover) {
method getPlayUrl (line 372) | public String getPlayUrl() {
method setPlayUrl (line 376) | public void setPlayUrl(String playUrl) {
method getThumbPlayUrl (line 380) | public Object getThumbPlayUrl() {
method setThumbPlayUrl (line 384) | public void setThumbPlayUrl(Object thumbPlayUrl) {
method getDuration (line 388) | public int getDuration() {
method setDuration (line 392) | public void setDuration(int duration) {
method getWebUrl (line 396) | public WebUrl getWebUrl() {
method setWebUrl (line 400) | public void setWebUrl(WebUrl webUrl) {
method getReleaseTime (line 404) | public long getReleaseTime() {
method setReleaseTime (line 408) | public void setReleaseTime(long releaseTime) {
method getCampaign (line 412) | public Object getCampaign() {
method setCampaign (line 416) | public void setCampaign(Object campaign) {
method getWaterMarks (line 420) | public Object getWaterMarks() {
method setWaterMarks (line 424) | public void setWaterMarks(Object waterMarks) {
method getAdTrack (line 428) | public Object getAdTrack() {
method setAdTrack (line 432) | public void setAdTrack(Object adTrack) {
method getType (line 436) | public String getType() {
method setType (line 440) | public void setType(String type) {
method getTitlePgc (line 444) | public Object getTitlePgc() {
method setTitlePgc (line 448) | public void setTitlePgc(Object titlePgc) {
method getDescriptionPgc (line 452) | public Object getDescriptionPgc() {
method setDescriptionPgc (line 456) | public void setDescriptionPgc(Object descriptionPgc) {
method getRemark (line 460) | public Object getRemark() {
method setRemark (line 464) | public void setRemark(Object remark) {
method isIfLimitVideo (line 468) | public boolean isIfLimitVideo() {
method setIfLimitVideo (line 472) | public void setIfLimitVideo(boolean ifLimitVideo) {
method getSearchWeight (line 476) | public int getSearchWeight() {
method setSearchWeight (line 480) | public void setSearchWeight(int searchWeight) {
method getIdx (line 484) | public int getIdx() {
method setIdx (line 488) | public void setIdx(int idx) {
method getShareAdTrack (line 492) | public Object getShareAdTrack() {
method setShareAdTrack (line 496) | public void setShareAdTrack(Object shareAdTrack) {
method getFavoriteAdTrack (line 500) | public Object getFavoriteAdTrack() {
method setFavoriteAdTrack (line 504) | public void setFavoriteAdTrack(Object favoriteAdTrack) {
method getWebAdTrack (line 508) | public Object getWebAdTrack() {
method setWebAdTrack (line 512) | public void setWebAdTrack(Object webAdTrack) {
method getDate (line 516) | public long getDate() {
method setDate (line 520) | public void setDate(long date) {
method getPromotion (line 524) | public Object getPromotion() {
method setPromotion (line 528) | public void setPromotion(Object promotion) {
method getLabel (line 532) | public Object getLabel() {
method setLabel (line 536) | public void setLabel(Object label) {
method getDescriptionEditor (line 540) | public String getDescriptionEditor() {
method setDescriptionEditor (line 544) | public void setDescriptionEditor(String descriptionEditor) {
method isCollected (line 548) | public boolean isCollected() {
method setCollected (line 552) | public void setCollected(boolean collected) {
method isPlayed (line 556) | public boolean isPlayed() {
method setPlayed (line 560) | public void setPlayed(boolean played) {
method getLastViewTime (line 564) | public Object getLastViewTime() {
method setLastViewTime (line 568) | public void setLastViewTime(Object lastViewTime) {
method getPlaylists (line 572) | public Object getPlaylists() {
method setPlaylists (line 576) | public void setPlaylists(Object playlists) {
method getSrc (line 580) | public Object getSrc() {
method setSrc (line 584) | public void setSrc(Object src) {
method getTags (line 588) | public List<Tags> getTags() {
method setTags (line 592) | public void setTags(List<Tags> tags) {
method getPlayInfo (line 596) | public List<PlayInfo> getPlayInfo() {
method setPlayInfo (line 600) | public void setPlayInfo(List<PlayInfo> playInfo) {
method getLabelList (line 604) | public List<?> getLabelList() {
method setLabelList (line 608) | public void setLabelList(List<?> labelList) {
method getSubtitles (line 612) | public List<?> getSubtitles() {
method setSubtitles (line 616) | public void setSubtitles(List<?> subtitles) {
class Consumption (line 620) | public static class Consumption {
method getCollectionCount (line 631) | public int getCollectionCount() {
method setCollectionCount (line 635) | public void setCollectionCount(int collectionCount) {
method getShareCount (line 639) | public int getShareCount() {
method setShareCount (line 643) | public void setShareCount(int shareCount) {
method getReplyCount (line 647) | public int getReplyCount() {
method setReplyCount (line 651) | public void setReplyCount(int replyCount) {
class Provider (line 656) | public static class Provider {
method getName (line 667) | public String getName() {
method setName (line 671) | public void setName(String name) {
method getAlias (line 675) | public String getAlias() {
method setAlias (line 679) | public void setAlias(String alias) {
method getIcon (line 683) | public String getIcon() {
method setIcon (line 687) | public void setIcon(String icon) {
class Author (line 692) | public static class Author {
method getId (line 721) | public int getId() {
method setId (line 725) | public void setId(int id) {
method getIcon (line 729) | public String getIcon() {
method setIcon (line 733) | public void setIcon(String icon) {
method getName (line 737) | public String getName() {
method setName (line 741) | public void setName(String name) {
method getDescription (line 745) | public String getDescription() {
method setDescription (line 749) | public void setDescription(String description) {
method getLink (line 753) | public String getLink() {
method setLink (line 757) | public void setLink(String link) {
method getLatestReleaseTime (line 761) | public long getLatestReleaseTime() {
method setLatestReleaseTime (line 765) | public void setLatestReleaseTime(long latestReleaseTime) {
method getVideoNum (line 769) | public int getVideoNum() {
method setVideoNum (line 773) | public void setVideoNum(int videoNum) {
method getAdTrack (line 777) | public Object getAdTrack() {
method setAdTrack (line 781) | public void setAdTrack(Object adTrack) {
method getFollow (line 785) | public Follow getFollow() {
method setFollow (line 789) | public void setFollow(Follow follow) {
method getShield (line 793) | public Shield getShield() {
method setShield (line 797) | public void setShield(Shield shield) {
method getApprovedNotReadyVideoCount (line 801) | public int getApprovedNotReadyVideoCount() {
method setApprovedNotReadyVideoCount (line 805) | public void setApprovedNotReadyVideoCount(int approvedNotReady...
method isIfPgc (line 809) | public boolean isIfPgc() {
method setIfPgc (line 813) | public void setIfPgc(boolean ifPgc) {
class Follow (line 817) | public static class Follow {
method getItemType (line 828) | public String getItemType() {
method setItemType (line 832) | public void setItemType(String itemType) {
method getItemId (line 836) | public int getItemId() {
method setItemId (line 840) | public void setItemId(int itemId) {
method isFollowed (line 844) | public boolean isFollowed() {
method setFollowed (line 848) | public void setFollowed(boolean followed) {
class Shield (line 853) | public static class Shield {
method getItemType (line 864) | public String getItemType() {
method setItemType (line 868) | public void setItemType(String itemType) {
method getItemId (line 872) | public int getItemId() {
method setItemId (line 876) | public void setItemId(int itemId) {
method isShielded (line 880) | public boolean isShielded() {
method setShielded (line 884) | public void setShielded(boolean shielded) {
class Cover (line 890) | public static class Cover {
method getFeed (line 905) | public String getFeed() {
method setFeed (line 909) | public void setFeed(String feed) {
method getDetail (line 913) | public String getDetail() {
method setDetail (line 917) | public void setDetail(String detail) {
method getBlurred (line 921) | public String getBlurred() {
method setBlurred (line 925) | public void setBlurred(String blurred) {
method getSharing (line 929) | public Object getSharing() {
method setSharing (line 933) | public void setSharing(Object sharing) {
method getHomepage (line 937) | public String getHomepage() {
method setHomepage (line 941) | public void setHomepage(String homepage) {
class WebUrl (line 946) | public static class WebUrl {
method getRaw (line 955) | public String getRaw() {
method setRaw (line 959) | public void setRaw(String raw) {
method getForWeibo (line 963) | public String getForWeibo() {
method setForWeibo (line 967) | public void setForWeibo(String forWeibo) {
class Tags (line 972) | public static class Tags {
method getId (line 997) | public int getId() {
method setId (line 1001) | public void setId(int id) {
method getName (line 1005) | public String getName() {
method setName (line 1009) | public void setName(String name) {
method getActionUrl (line 1013) | public String getActionUrl() {
method setActionUrl (line 1017) | public void setActionUrl(String actionUrl) {
method getAdTrack (line 1021) | public Object getAdTrack() {
method setAdTrack (line 1025) | public void setAdTrack(Object adTrack) {
method getDesc (line 1029) | public Object getDesc() {
method setDesc (line 1033) | public void setDesc(Object desc) {
method getBgPicture (line 1037) | public String getBgPicture() {
method setBgPicture (line 1041) | public void setBgPicture(String bgPicture) {
method getHeaderImage (line 1045) | public String getHeaderImage() {
method setHeaderImage (line 1049) | public void setHeaderImage(String headerImage) {
method getTagRecType (line 1053) | public String getTagRecType() {
method setTagRecType (line 1057) | public void setTagRecType(String tagRecType) {
method getChildTagList (line 1061) | public Object getChildTagList() {
method setChildTagList (line 1065) | public void setChildTagList(Object childTagList) {
method getChildTagIdList (line 1069) | public Object getChildTagIdList() {
method setChildTagIdList (line 1073) | public void setChildTagIdList(Object childTagIdList) {
class PlayInfo (line 1078) | public static class PlayInfo {
method getHeight (line 1095) | public int getHeight() {
method setHeight (line 1099) | public void setHeight(int height) {
method getWidth (line 1103) | public int getWidth() {
method setWidth (line 1107) | public void setWidth(int width) {
method getName (line 1111) | public String getName() {
method setName (line 1115) | public void setName(String name) {
method getType (line 1119) | public String getType() {
method setType (line 1123) | public void setType(String type) {
method getUrl (line 1127) | public String getUrl() {
method setUrl (line 1131) | public void setUrl(String url) {
method getUrlList (line 1135) | public List<UrlList> getUrlList() {
method setUrlList (line 1139) | public void setUrlList(List<UrlList> urlList) {
class UrlList (line 1143) | public static class UrlList {
method getName (line 1154) | public String getName() {
method setName (line 1158) | public void setName(String name) {
method getUrl (line 1162) | public String getUrl() {
method setUrl (line 1166) | public void setUrl(String url) {
method getSize (line 1170) | public int getSize() {
method setSize (line 1174) | public void setSize(int size) {
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/presenter/HomePresenter.java
class HomePresenter (line 21) | public class HomePresenter implements HomeContract.IPresenter {
method HomePresenter (line 29) | public HomePresenter(HomeContract.IView view) {
method requestFirstPage (line 34) | @Override
method requestNextPage (line 57) | @Override
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/net/APIRetrofit.java
class APIRetrofit (line 14) | public class APIRetrofit {
method getEyepetizerService (line 16) | public static APIService getEyepetizerService() {
method getOkHttpClient (line 25) | private static OkHttpClient getOkHttpClient() {
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/net/APIService.java
type APIService (line 13) | public interface APIService {
method getFirstHomeData (line 15) | @GET("v2/feed?&num=1")
method getMoreHomeData (line 18) | @GET
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/activity/ContainerActivity.java
class ContainerActivity (line 16) | @Route(path = BaseConstants.EYEPETIZER_CONTAINER)
method getLayoutResId (line 19) | @Override
method doCreateView (line 24) | @Override
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/activity/HomeActivity.java
class HomeActivity (line 26) | @Route(path = BaseConstants.EYEPETIZER_MENU)
method getLayoutResId (line 39) | @Override
method doCreateView (line 44) | @Override
method configToolbar (line 55) | private void configToolbar() {
method configList (line 67) | private void configList() {
method setFirstPage (line 99) | @Override
method setNextPage (line 105) | @Override
method onError (line 111) | @Override
method onOptionsItemSelected (line 116) | @Override
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/adapter/HomeAdapter.java
class HomeAdapter (line 19) | public class HomeAdapter extends BaseQuickAdapter<HomeBean.IssueList.Ite...
method HomeAdapter (line 23) | public HomeAdapter(Context context) {
method convert (line 28) | @Override
FILE: eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/fragment/VideoFragment.java
class VideoFragment (line 20) | @Route(path = BaseConstants.EYEPETIZER_VIDEO)
method getLayoutResId (line 29) | @Override
method doCreateView (line 34) | @Override
method handleArgument (line 41) | private void handleArgument() {
method configVideo (line 48) | private void configVideo() {
method play (line 65) | public void play(String url){
method start (line 71) | private void start(){
method pause (line 75) | public void pause(){
method stopPlayback (line 79) | public void stopPlayback(){
method seekTo (line 83) | public void seekTo(long i){
method isPlaying (line 87) | public boolean isPlaying(){
method getVideoView (line 91) | public PLVideoTextureView getVideoView(){
method getDisplayAspectRatio (line 95) | public int getDisplayAspectRatio(){
method onClickRotate (line 99) | public void onClickRotate(View v) {
method setDisplayAspectRatio (line 113) | public void setDisplayAspectRatio(int ratio){
method setDisplayOrientation (line 117) | public void setDisplayOrientation(int orientation){
method onResume (line 121) | @Override
method onPause (line 127) | @Override
method onDestroy (line 133) | @Override
FILE: eyepetizer/src/test/java/me/shouheng/eyepetizer/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: guokr/src/androidTest/java/me/shouheng/guokr/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: guokr/src/main/java/me/shouheng/guokr/ModuleGuokrApp.java
class ModuleGuokrApp (line 11) | public class ModuleGuokrApp extends BaseApplication {
method getContext (line 15) | public static ModuleGuokrApp getContext() {
method onCreate (line 19) | @Override
FILE: guokr/src/main/java/me/shouheng/guokr/model/data/GuokrNews.java
class GuokrNews (line 9) | public class GuokrNews {
method getNow (line 27) | public String getNow() {
method setNow (line 31) | public void setNow(String now) {
method isOk (line 35) | public boolean isOk() {
method setOk (line 39) | public void setOk(boolean ok) {
method getLimit (line 43) | public int getLimit() {
method setLimit (line 47) | public void setLimit(int limit) {
method getOffset (line 51) | public int getOffset() {
method setOffset (line 55) | public void setOffset(int offset) {
method getTotal (line 59) | public int getTotal() {
method setTotal (line 63) | public void setTotal(int total) {
method getResult (line 67) | public List<Result> getResult() {
method setResult (line 71) | public void setResult(List<Result> result) {
class Result (line 75) | public static class Result {
method getImage (line 144) | public String getImage() {
method setImage (line 148) | public void setImage(String image) {
method isIs_replyable (line 152) | public boolean isIs_replyable() {
method setIs_replyable (line 156) | public void setIs_replyable(boolean is_replyable) {
method getPreface (line 160) | public String getPreface() {
method setPreface (line 164) | public void setPreface(String preface) {
method getId (line 168) | public int getId() {
method setId (line 172) | public void setId(int id) {
method getSubject (line 176) | public Subject getSubject() {
method setSubject (line 180) | public void setSubject(Subject subject) {
method isIs_editor_recommend (line 184) | public boolean isIs_editor_recommend() {
method setIs_editor_recommend (line 188) | public void setIs_editor_recommend(boolean is_editor_recommend) {
method getCopyright (line 192) | public String getCopyright() {
method setCopyright (line 196) | public void setCopyright(String copyright) {
method getAuthor (line 200) | public Author getAuthor() {
method setAuthor (line 204) | public void setAuthor(Author author) {
method getImage_description (line 208) | public String getImage_description() {
method setImage_description (line 212) | public void setImage_description(String image_description) {
method isIs_show_summary (line 216) | public boolean isIs_show_summary() {
method setIs_show_summary (line 220) | public void setIs_show_summary(boolean is_show_summary) {
method getMinisite_key (line 224) | public String getMinisite_key() {
method setMinisite_key (line 228) | public void setMinisite_key(String minisite_key) {
method getImage_info (line 232) | public ImageInfo getImage_info() {
method setImage_info (line 236) | public void setImage_info(ImageInfo image_info) {
method getSubject_key (line 240) | public String getSubject_key() {
method setSubject_key (line 244) | public void setSubject_key(String subject_key) {
method getMinisite (line 248) | public Minisite getMinisite() {
method setMinisite (line 252) | public void setMinisite(Minisite minisite) {
method getDate_published (line 256) | public String getDate_published() {
method setDate_published (line 260) | public void setDate_published(String date_published) {
method getVideo_content (line 264) | public String getVideo_content() {
method setVideo_content (line 268) | public void setVideo_content(String video_content) {
method getReplies_count (line 272) | public int getReplies_count() {
method setReplies_count (line 276) | public void setReplies_count(int replies_count) {
method isIs_author_external (line 280) | public boolean isIs_author_external() {
method setIs_author_external (line 284) | public void setIs_author_external(boolean is_author_external) {
method getRecommends_count (line 288) | public int getRecommends_count() {
method setRecommends_count (line 292) | public void setRecommends_count(int recommends_count) {
method getTitle_hide (line 296) | public String getTitle_hide() {
method setTitle_hide (line 300) | public void setTitle_hide(String title_hide) {
method getDate_modified (line 304) | public String getDate_modified() {
method setDate_modified (line 308) | public void setDate_modified(String date_modified) {
method getUrl (line 312) | public String getUrl() {
method setUrl (line 316) | public void setUrl(String url) {
method getTitle (line 320) | public String getTitle() {
method setTitle (line 324) | public void setTitle(String title) {
method getSmall_image (line 328) | public String getSmall_image() {
method setSmall_image (line 332) | public void setSmall_image(String small_image) {
method getSummary (line 336) | public String getSummary() {
method setSummary (line 340) | public void setSummary(String summary) {
method getUkey_author (line 344) | public String getUkey_author() {
method setUkey_author (line 348) | public void setUkey_author(String ukey_author) {
method getDate_created (line 352) | public String getDate_created() {
method setDate_created (line 356) | public void setDate_created(String date_created) {
method getResource_url (line 360) | public String getResource_url() {
method setResource_url (line 364) | public void setResource_url(String resource_url) {
method getChannels (line 368) | public List<?> getChannels() {
method setChannels (line 372) | public void setChannels(List<?> channels) {
method getChannel_keys (line 376) | public List<?> getChannel_keys() {
method setChannel_keys (line 380) | public void setChannel_keys(List<?> channel_keys) {
method getTags (line 384) | public List<String> getTags() {
method setTags (line 388) | public void setTags(List<String> tags) {
method getAuthors (line 392) | public List<Authors> getAuthors() {
method setAuthors (line 396) | public void setAuthors(List<Authors> authors) {
class Subject (line 400) | public static class Subject {
method getUrl (line 415) | public String getUrl() {
method setUrl (line 419) | public void setUrl(String url) {
method getDate_created (line 423) | public String getDate_created() {
method setDate_created (line 427) | public void setDate_created(String date_created) {
method getName (line 431) | public String getName() {
method setName (line 435) | public void setName(String name) {
method getKey (line 439) | public String getKey() {
method setKey (line 443) | public void setKey(String key) {
method getArticles_count (line 447) | public int getArticles_count() {
method setArticles_count (line 451) | public void setArticles_count(int articles_count) {
class Author (line 456) | public static class Author {
method getUkey (line 485) | public String getUkey() {
method setUkey (line 489) | public void setUkey(String ukey) {
method isIs_title_authorized (line 493) | public boolean isIs_title_authorized() {
method setIs_title_authorized (line 497) | public void setIs_title_authorized(boolean is_title_authorized) {
method getNickname (line 501) | public String getNickname() {
method setNickname (line 505) | public void setNickname(String nickname) {
method getMaster_category (line 509) | public String getMaster_category() {
method setMaster_category (line 513) | public void setMaster_category(String master_category) {
method getAmended_reliability (line 517) | public String getAmended_reliability() {
method setAmended_reliability (line 521) | public void setAmended_reliability(String amended_reliability) {
method isIs_exists (line 525) | public boolean isIs_exists() {
method setIs_exists (line 529) | public void setIs_exists(boolean is_exists) {
method getTitle (line 533) | public String getTitle() {
method setTitle (line 537) | public void setTitle(String title) {
method getUrl (line 541) | public String getUrl() {
method setUrl (line 545) | public void setUrl(String url) {
method getGender (line 549) | public String getGender() {
method setGender (line 553) | public void setGender(String gender) {
method getFollowers_count (line 557) | public int getFollowers_count() {
method setFollowers_count (line 561) | public void setFollowers_count(int followers_count) {
method getAvatar (line 565) | public Avatar getAvatar() {
method setAvatar (line 569) | public void setAvatar(Avatar avatar) {
method getResource_url (line 573) | public String getResource_url() {
method setResource_url (line 577) | public void setResource_url(String resource_url) {
class Avatar (line 581) | public static class Avatar {
method getLarge (line 592) | public String getLarge() {
method setLarge (line 596) | public void setLarge(String large) {
method getSmall (line 600) | public String getSmall() {
method setSmall (line 604) | public void setSmall(String small) {
method getNormal (line 608) | public String getNormal() {
method setNormal (line 612) | public void setNormal(String normal) {
class ImageInfo (line 618) | public static class ImageInfo {
method getUrl (line 629) | public String getUrl() {
method setUrl (line 633) | public void setUrl(String url) {
method getWidth (line 637) | public int getWidth() {
method setWidth (line 641) | public void setWidth(int width) {
method getHeight (line 645) | public int getHeight() {
method setHeight (line 649) | public void setHeight(int height) {
class Minisite (line 654) | public static class Minisite {
method getName (line 671) | public String getName() {
method setName (line 675) | public void setName(String name) {
method getUrl (line 679) | public String getUrl() {
method setUrl (line 683) | public void setUrl(String url) {
method getIntroduction (line 687) | public String getIntroduction() {
method setIntroduction (line 691) | public void setIntroduction(String introduction) {
method getKey (line 695) | public String getKey() {
method setKey (line 699) | public void setKey(String key) {
method getDate_created (line 703) | public String getDate_created() {
method setDate_created (line 707) | public void setDate_created(String date_created) {
method getIcon (line 711) | public String getIcon() {
method setIcon (line 715) | public void setIcon(String icon) {
class Authors (line 720) | public static class Authors {
method getUkey (line 749) | public String getUkey() {
method setUkey (line 753) | public void setUkey(String ukey) {
method isIs_title_authorized (line 757) | public boolean isIs_title_authorized() {
method setIs_title_authorized (line 761) | public void setIs_title_authorized(boolean is_title_authorized) {
method getNickname (line 765) | public String getNickname() {
method setNickname (line 769) | public void setNickname(String nickname) {
method getMaster_category (line 773) | public String getMaster_category() {
method setMaster_category (line 777) | public void setMaster_category(String master_category) {
method getAmended_reliability (line 781) | public String getAmended_reliability() {
method setAmended_reliability (line 785) | public void setAmended_reliability(String amended_reliability) {
method isIs_exists (line 789) | public boolean isIs_exists() {
method setIs_exists (line 793) | public void setIs_exists(boolean is_exists) {
method getTitle (line 797) | public String getTitle() {
method setTitle (line 801) | public void setTitle(String title) {
method getUrl (line 805) | public String getUrl() {
method setUrl (line 809) | public void setUrl(String url) {
method getGender (line 813) | public String getGender() {
method setGender (line 817) | public void setGender(String gender) {
method getFollowers_count (line 821) | public int getFollowers_count() {
method setFollowers_count (line 825) | public void setFollowers_count(int followers_count) {
method getAvatar (line 829) | public Object getAvatar() {
method setAvatar (line 833) | public void setAvatar(Object avatar) {
method getResource_url (line 837) | public String getResource_url() {
method setResource_url (line 841) | public void setResource_url(String resource_url) {
class AvatarX (line 845) | public static class AvatarX {
method getLarge (line 856) | public String getLarge() {
method setLarge (line 860) | public void setLarge(String large) {
method getSmall (line 864) | public String getSmall() {
method setSmall (line 868) | public void setSmall(String small) {
method getNormal (line 872) | public String getNormal() {
method setNormal (line 876) | public void setNormal(String normal) {
FILE: guokr/src/main/java/me/shouheng/guokr/model/data/GuokrNewsContent.java
class GuokrNewsContent (line 9) | public class GuokrNewsContent {
method getNow (line 21) | public String getNow() {
method setNow (line 25) | public void setNow(String now) {
method isOk (line 29) | public boolean isOk() {
method setOk (line 33) | public void setOk(boolean ok) {
method getResult (line 37) | public Result getResult() {
method setResult (line 41) | public void setResult(Result result) {
class Result (line 45) | public static class Result {
method getImage (line 177) | public String getImage() {
method setImage (line 181) | public void setImage(String image) {
method isIs_replyable (line 185) | public boolean isIs_replyable() {
method setIs_replyable (line 189) | public void setIs_replyable(boolean is_replyable) {
method getPreface (line 193) | public String getPreface() {
method setPreface (line 197) | public void setPreface(String preface) {
method getId (line 201) | public int getId() {
method setId (line 205) | public void setId(int id) {
method getSubject (line 209) | public Subject getSubject() {
method setSubject (line 213) | public void setSubject(Subject subject) {
method isIs_editor_recommend (line 217) | public boolean isIs_editor_recommend() {
method setIs_editor_recommend (line 221) | public void setIs_editor_recommend(boolean is_editor_recommend) {
method getCopyright (line 225) | public String getCopyright() {
method setCopyright (line 229) | public void setCopyright(String copyright) {
method getAuthor (line 233) | public Author getAuthor() {
method setAuthor (line 237) | public void setAuthor(Author author) {
method getImage_description (line 241) | public String getImage_description() {
method setImage_description (line 245) | public void setImage_description(String image_description) {
method getContent (line 249) | public String getContent() {
method setContent (line 253) | public void setContent(String content) {
method isIs_show_summary (line 257) | public boolean isIs_show_summary() {
method setIs_show_summary (line 261) | public void setIs_show_summary(boolean is_show_summary) {
method getMinisite_key (line 265) | public String getMinisite_key() {
method setMinisite_key (line 269) | public void setMinisite_key(String minisite_key) {
method getImage_info (line 273) | public ImageInfo getImage_info() {
method setImage_info (line 277) | public void setImage_info(ImageInfo image_info) {
method getSubject_key (line 281) | public String getSubject_key() {
method setSubject_key (line 285) | public void setSubject_key(String subject_key) {
method getMinisite (line 289) | public Minisite getMinisite() {
method setMinisite (line 293) | public void setMinisite(Minisite minisite) {
method getDate_published (line 297) | public String getDate_published() {
method setDate_published (line 301) | public void setDate_published(String date_published) {
method getVideo_content (line 305) | public String getVideo_content() {
method setVideo_content (line 309) | public void setVideo_content(String video_content) {
method getReplies_count (line 313) | public int getReplies_count() {
method setReplies_count (line 317) | public void setReplies_count(int replies_count) {
method isIs_author_external (line 321) | public boolean isIs_author_external() {
method setIs_author_external (line 325) | public void setIs_author_external(boolean is_author_external) {
method getRecommends_count (line 329) | public int getRecommends_count() {
method setRecommends_count (line 333) | public void setRecommends_count(int recommends_count) {
method getTitle_hide (line 337) | public String getTitle_hide() {
method setTitle_hide (line 341) | public void setTitle_hide(String title_hide) {
method getDate_modified (line 345) | public String getDate_modified() {
method setDate_modified (line 349) | public void setDate_modified(String date_modified) {
method getUrl (line 353) | public String getUrl() {
method setUrl (line 357) | public void setUrl(String url) {
method getTitle (line 361) | public String getTitle() {
method setTitle (line 365) | public void setTitle(String title) {
method getSmall_image (line 369) | public String getSmall_image() {
method setSmall_image (line 373) | public void setSmall_image(String small_image) {
method getSummary (line 377) | public String getSummary() {
method setSummary (line 381) | public void setSummary(String summary) {
method getUkey_author (line 385) | public String getUkey_author() {
method setUkey_author (line 389) | public void setUkey_author(String ukey_author) {
method getDate_created (line 393) | public String getDate_created() {
method setDate_created (line 397) | public void setDate_created(String date_created) {
method getResource_url (line 401) | public String getResource_url() {
method setResource_url (line 405) | public void setResource_url(String resource_url) {
method getChannels (line 409) | public List<?> getChannels() {
method setChannels (line 413) | public void setChannels(List<?> channels) {
method getChannel_keys (line 417) | public List<?> getChannel_keys() {
method setChannel_keys (line 421) | public void setChannel_keys(List<?> channel_keys) {
method getTags (line 425) | public List<String> getTags() {
method setTags (line 429) | public void setTags(List<String> tags) {
method getAuthors (line 433) | public List<Authors> getAuthors() {
method setAuthors (line 437) | public void setAuthors(List<Authors> authors) {
class Subject (line 441) | public static class Subject {
method getUrl (line 456) | public String getUrl() {
method setUrl (line 460) | public void setUrl(String url) {
method getDate_created (line 464) | public String getDate_created() {
method setDate_created (line 468) | public void setDate_created(String date_created) {
method getName (line 472) | public String getName() {
method setName (line 476) | public void setName(String name) {
method getKey (line 480) | public String getKey() {
method setKey (line 484) | public void setKey(String key) {
method getArticles_count (line 488) | public int getArticles_count() {
method setArticles_count (line 492) | public void setArticles_count(int articles_count) {
class Author (line 497) | public static class Author {
method getUkey (line 526) | public String getUkey() {
method setUkey (line 530) | public void setUkey(String ukey) {
method isIs_title_authorized (line 534) | public boolean isIs_title_authorized() {
method setIs_title_authorized (line 538) | public void setIs_title_authorized(boolean is_title_authorized) {
method getNickname (line 542) | public String getNickname() {
method setNickname (line 546) | public void setNickname(String nickname) {
method getMaster_category (line 550) | public String getMaster_category() {
method setMaster_category (line 554) | public void setMaster_category(String master_category) {
method getAmended_reliability (line 558) | public String getAmended_reliability() {
method setAmended_reliability (line 562) | public void setAmended_reliability(String amended_reliability) {
method isIs_exists (line 566) | public boolean isIs_exists() {
method setIs_exists (line 570) | public void setIs_exists(boolean is_exists) {
method getTitle (line 574) | public String getTitle() {
method setTitle (line 578) | public void setTitle(String title) {
method getUrl (line 582) | public String getUrl() {
method setUrl (line 586) | public void setUrl(String url) {
method getGender (line 590) | public String getGender() {
method setGender (line 594) | public void setGender(String gender) {
method getFollowers_count (line 598) | public int getFollowers_count() {
method setFollowers_count (line 602) | public void setFollowers_count(int followers_count) {
method getAvatar (line 606) | public Avatar getAvatar() {
method setAvatar (line 610) | public void setAvatar(Avatar avatar) {
method getResource_url (line 614) | public String getResource_url() {
method setResource_url (line 618) | public void setResource_url(String resource_url) {
class Avatar (line 622) | public static class Avatar {
method getLarge (line 633) | public String getLarge() {
method setLarge (line 637) | public void setLarge(String large) {
method getSmall (line 641) | public String getSmall() {
method setSmall (line 645) | public void setSmall(String small) {
method getNormal (line 649) | public String getNormal() {
method setNormal (line 653) | public void setNormal(String normal) {
class ImageInfo (line 659) | public static class ImageInfo {
method getUrl (line 670) | public String getUrl() {
method setUrl (line 674) | public void setUrl(String url) {
method getWidth (line 678) | public int getWidth() {
method setWidth (line 682) | public void setWidth(int width) {
method getHeight (line 686) | public int getHeight() {
method setHeight (line 690) | public void setHeight(int height) {
class Minisite (line 695) | public static class Minisite {
method getName (line 712) | public String getName() {
method setName (line 716) | public void setName(String name) {
method getUrl (line 720) | public String getUrl() {
method setUrl (line 724) | public void setUrl(String url) {
method getIntroduction (line 728) | public String getIntroduction() {
method setIntroduction (line 732) | public void setIntroduction(String introduction) {
method getKey (line 736) | public String getKey() {
method setKey (line 740) | public void setKey(String key) {
method getDate_created (line 744) | public String getDate_created() {
method setDate_created (line 748) | public void setDate_created(String date_created) {
method getIcon (line 752) | public String getIcon() {
method setIcon (line 756) | public void setIcon(String icon) {
class Authors (line 761) | public static class Authors {
method getUkey (line 790) | public String getUkey() {
method setUkey (line 794) | public void setUkey(String ukey) {
method isIs_title_authorized (line 798) | public boolean isIs_title_authorized() {
method setIs_title_authorized (line 802) | public void setIs_title_authorized(boolean is_title_authorized) {
method getNickname (line 806) | public String getNickname() {
method setNickname (line 810) | public void setNickname(String nickname) {
method getMaster_category (line 814) | public String getMaster_category() {
method setMaster_category (line 818) | public void setMaster_category(String master_category) {
method getAmended_reliability (line 822) | public String getAmended_reliability() {
method setAmended_reliability (line 826) | public void setAmended_reliability(String amended_reliability) {
method isIs_exists (line 830) | public boolean isIs_exists() {
method setIs_exists (line 834) | public void setIs_exists(boolean is_exists) {
method getTitle (line 838) | public String getTitle() {
method setTitle (line 842) | public void setTitle(String title) {
method getUrl (line 846) | public String getUrl() {
method setUrl (line 850) | public void setUrl(String url) {
method getGender (line 854) | public String getGender() {
method setGender (line 858) | public void setGender(String gender) {
method getFollowers_count (line 862) | public int getFollowers_count() {
method setFollowers_count (line 866) | public void setFollowers_count(int followers_count) {
method getAvatar (line 870) | public Object getAvatar() {
method setAvatar (line 874) | public void setAvatar(Object avatar) {
method getResource_url (line 878) | public String getResource_url() {
method setResource_url (line 882) | public void setResource_url(String resource_url) {
class AvatarX (line 886) | public static class AvatarX {
method getLarge (line 897) | public String getLarge() {
method setLarge (line 901) | public void setLarge(String large) {
method getSmall (line 905) | public String getSmall() {
method setSmall (line 909) | public void setSmall(String small) {
method getNormal (line 913) | public String getNormal() {
method setNormal (line 917) | public void setNormal(String normal) {
FILE: guokr/src/main/java/me/shouheng/guokr/model/repository/GuokrRetrofit.java
class GuokrRetrofit (line 12) | public class GuokrRetrofit {
method getGuokrService (line 14) | public static GuokrService getGuokrService() {
method getOkHttpClient (line 23) | private static OkHttpClient getOkHttpClient() {
FILE: guokr/src/main/java/me/shouheng/guokr/model/repository/GuokrService.java
type GuokrService (line 14) | public interface GuokrService {
method getNews (line 16) | @GET("article.json?retrieve_type=by_minisite")
method getGuokrContent (line 19) | @GET("article/{id}.json")
FILE: guokr/src/main/java/me/shouheng/guokr/view/GuokrNewsActivity.java
class GuokrNewsActivity (line 20) | @Route(path = BaseConstants.GUOKR_NEWS)
method getLayoutResId (line 23) | @Override
method doCreateView (line 28) | @Override
method configToolbar (line 35) | private void configToolbar() {
method toFragment (line 47) | private void toFragment(Fragment fragment) {
method toFragmentWithCallback (line 51) | private void toFragmentWithCallback(Fragment fragment) {
method onArticleClicked (line 55) | @Override
method onOptionsItemSelected (line 65) | @Override
FILE: guokr/src/main/java/me/shouheng/guokr/view/adapter/GuokrNewsAdapter.java
class GuokrNewsAdapter (line 20) | public class GuokrNewsAdapter extends BaseQuickAdapter<GuokrNews.Result,...
method GuokrNewsAdapter (line 24) | public GuokrNewsAdapter(Context context) {
method convert (line 29) | @Override
FILE: guokr/src/main/java/me/shouheng/guokr/view/fragment/NewsDetailFragment.java
class NewsDetailFragment (line 28) | @Route(path = BaseConstants.GUOKR_NEWS_DETAIL)
method getLayoutResId (line 37) | @Override
method doCreateView (line 42) | @Override
method handleArguments (line 57) | private void handleArguments() {
method configToolbar (line 64) | private void configToolbar() {
method configViews (line 75) | @SuppressLint("SetJavaScriptEnabled")
method registerObservers (line 93) | private void registerObservers() {
method updateContent (line 108) | private void updateContent(GuokrNewsContent content) {
FILE: guokr/src/main/java/me/shouheng/guokr/view/fragment/NewsListFragment.java
class NewsListFragment (line 26) | @Route(path = BaseConstants.GUOKR_NEWS_LIST)
method getLayoutResId (line 33) | @Override
method doCreateView (line 38) | @Override
method onResume (line 54) | @Override
method configViews (line 67) | private void configViews() {
method registerObservers (line 83) | private void registerObservers() {
type FragmentInteraction (line 98) | public interface FragmentInteraction {
method onArticleClicked (line 99) | void onArticleClicked(GuokrNews.Result result);
FILE: guokr/src/main/java/me/shouheng/guokr/viewmodel/GuokrViewModel.java
class GuokrViewModel (line 20) | public class GuokrViewModel extends ViewModel {
method getGuokrNewsLiveData (line 30) | public LiveData<Resource<GuokrNews>> getGuokrNewsLiveData() {
method getGuokrNewsContentLiveData (line 37) | public LiveData<Resource<GuokrNewsContent>> getGuokrNewsContentLiveDat...
method fetchFirstPage (line 44) | public void fetchFirstPage() {
method fetchNextPage (line 48) | public void fetchNextPage() {
method fetchGuokrNews (line 53) | private void fetchGuokrNews(int offset, int limit) {
method fetchGuokrNewsContent (line 77) | public void fetchGuokrNewsContent(int id) {
FILE: guokr/src/test/java/me/shouheng/guokr/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: knife-api/src/main/java/me/shouheng/knife/api/Injector.java
type Injector (line 9) | public interface Injector<T> {
method inject (line 11) | void inject(T host, Object source, Finder finder);
FILE: knife-api/src/main/java/me/shouheng/knife/api/MyKnife.java
class MyKnife (line 17) | public class MyKnife {
method MyKnife (line 19) | public MyKnife() {
method bind (line 29) | public static void bind(Activity activity) {
method bind (line 33) | public static void bind(View view) {
method bind (line 37) | public static void bind(Object host, View view) {
method bind (line 41) | public static void bind(Object host, Object source, Finder finder) {
FILE: knife-api/src/main/java/me/shouheng/knife/api/Unbinder.java
type Unbinder (line 7) | public interface Unbinder {
method unbind (line 9) | void unbind();
method unbind (line 12) | @Override
FILE: knife-api/src/main/java/me/shouheng/knife/api/finder/ActivityFinder.java
class ActivityFinder (line 11) | public class ActivityFinder implements Finder {
method getContext (line 13) | @Override
method findView (line 18) | @Override
FILE: knife-api/src/main/java/me/shouheng/knife/api/finder/Finder.java
type Finder (line 10) | public interface Finder {
method getContext (line 12) | Context getContext(Object source);
method findView (line 14) | View findView(Object source, int id);
FILE: knife-api/src/main/java/me/shouheng/knife/api/finder/ViewFinder.java
class ViewFinder (line 10) | public class ViewFinder implements Finder {
method getContext (line 12) | @Override
method findView (line 17) | @Override
FILE: knife-compiler/src/main/java/me/shouheng/knife/compiler/BindViewProcessor.java
class BindViewProcessor (line 32) | @AutoService(Processor.class)
method init (line 45) | @Override
method getSupportedAnnotationTypes (line 53) | @Override
method getSupportedSourceVersion (line 61) | @Override
method process (line 66) | @Override
method processBindView (line 89) | private void processBindView(RoundEnvironment roundEnv) {
method getAnnotatedClass (line 98) | private AnnotatedClass getAnnotatedClass(Element element) {
method processOnClick (line 109) | private void processOnClick(RoundEnvironment roundEnv) {
method error (line 117) | private void error(String msg, Object... args) {
method info (line 121) | private void info(String msg, Object... args) {
FILE: knife-compiler/src/main/java/me/shouheng/knife/compiler/TypeUtils.java
class TypeUtils (line 9) | public class TypeUtils {
FILE: knife-compiler/src/main/java/me/shouheng/knife/compiler/model/AnnotatedClass.java
class AnnotatedClass (line 23) | public class AnnotatedClass {
method AnnotatedClass (line 33) | public AnnotatedClass(TypeElement typeElement, Elements elements) {
method getFullClassName (line 40) | public String getFullClassName() {
method addField (line 44) | public void addField(BindViewField bindViewField) {
method addMethod (line 48) | public void addMethod(OnClickMethod method) {
method generateFinder (line 52) | public JavaFile generateFinder() {
method getPackageName (line 96) | private String getPackageName(TypeElement type) {
method getClassName (line 100) | private String getClassName(TypeElement type, String packageName) {
FILE: knife-compiler/src/main/java/me/shouheng/knife/compiler/model/BindViewField.java
class BindViewField (line 15) | public class BindViewField {
method BindViewField (line 26) | public BindViewField(Element element) {
method getFieldName (line 38) | public Name getFieldName() {
method getViewId (line 42) | public int getViewId() {
method getFieldType (line 46) | public TypeMirror getFieldType() {
FILE: knife-compiler/src/main/java/me/shouheng/knife/compiler/model/OnClickMethod.java
class OnClickMethod (line 17) | public class OnClickMethod {
method OnClickMethod (line 23) | public OnClickMethod(Element element) {
method getMethodName (line 42) | public Name getMethodName() {
method getIds (line 46) | public int[] getIds() {
FILE: layout/src/androidTest/java/me/shouheng/layout/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: layout/src/main/java/me/shouheng/layout/ModuleLayoutApp.java
class ModuleLayoutApp (line 11) | public class ModuleLayoutApp extends BaseApplication {
method getContext (line 15) | public static ModuleLayoutApp getContext() {
method onCreate (line 19) | @Override
FILE: layout/src/main/java/me/shouheng/layout/common/NormalTipsFragment.java
class NormalTipsFragment (line 20) | @Route(path = BaseConstants.LAYOUT_NORMAL_FRAGMENT)
method getLayoutResId (line 29) | @Override
method doCreateView (line 34) | @Override
method onActivityCreated (line 43) | @Override
method handleArguments (line 49) | private void handleArguments() {
method configToolbar (line 57) | private void configToolbar() {
method configViews (line 74) | private void configViews() {
FILE: layout/src/main/java/me/shouheng/layout/view/ActivityEditLayout.java
class ActivityEditLayout (line 23) | @Route(path = BaseConstants.LAYOUT_EDIT_LAYOUT)
method getLayoutResId (line 26) | @Override
method doCreateView (line 31) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/DrawerActivity.java
class DrawerActivity (line 21) | @Route(path = BaseConstants.LAYOUT_DRAWER)
method onCreate (line 25) | @Override
method onBackPressed (line 51) | @Override
method onCreateOptionsMenu (line 61) | @Override
method onOptionsItemSelected (line 68) | @Override
method onNavigationItemSelected (line 83) | @SuppressWarnings("StatementWithEmptyBody")
FILE: layout/src/main/java/me/shouheng/layout/view/LayoutMenuActivity.java
class LayoutMenuActivity (line 16) | @Route(path = BaseConstants.LAYOUT_MENU)
method getLayoutResId (line 21) | @Override
method doCreateView (line 26) | @Override
method configToolbar (line 81) | private void configToolbar() {
method onOptionsItemSelected (line 93) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/adapter/AdapterUtils.java
class AdapterUtils (line 12) | public class AdapterUtils {
method setCustomDensity (line 18) | public static void setCustomDensity(Activity activity, Application app...
FILE: layout/src/main/java/me/shouheng/layout/view/adapter/BeforeAdapter.java
class BeforeAdapter (line 17) | @Route(path = BaseConstants.LAYOUT_ADAPTER)
method getLayoutResId (line 20) | @Override
method doCreateView (line 25) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/bottomsheet/BottomSheetActivity.java
class BottomSheetActivity (line 13) | @Route(path = BaseConstants.LAYOUT_BOTTOM_SHEET)
method getLayoutResId (line 16) | @Override
method doCreateView (line 21) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/collapse/CollapseBarStructure.java
class CollapseBarStructure (line 13) | @Route(path = BaseConstants.LAYOUT_COLLAPSE_BAR)
method getLayoutResId (line 16) | @Override
method doCreateView (line 21) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/custom/CustomView.java
class CustomView (line 13) | public class CustomView extends View {
method CustomView (line 15) | public CustomView(Context context) {
method CustomView (line 19) | public CustomView(Context context, @Nullable AttributeSet attrs) {
method CustomView (line 23) | public CustomView(Context context, @Nullable AttributeSet attrs, int d...
method onDraw (line 27) | @Override
method onLayout (line 32) | @Override
method onMeasure (line 37) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/navigation/NavigationActivity.java
class NavigationActivity (line 17) | @Route(path = BaseConstants.LAYOUT_NAVIGATION)
method getLayoutResId (line 28) | @Override
method doCreateView (line 33) | @Override
method initFragments (line 51) | private void initFragments(Bundle savedInstanceState) {
method showFragment (line 86) | private void showFragment(String key) {
FILE: layout/src/main/java/me/shouheng/layout/view/navigation/fragment/PagerFragment.java
class PagerFragment (line 27) | @Route(path = BaseConstants.LAYOUT_PAGER_FRAGMENT)
method getLayoutResId (line 30) | @Override
method doCreateView (line 35) | @Override
class TabFragmentAdapter (line 80) | public static class TabFragmentAdapter extends FragmentPagerAdapter {
method TabFragmentAdapter (line 86) | TabFragmentAdapter(FragmentManager fm, List<Fragment> fragments, Lis...
method getItem (line 95) | @Override
method getCount (line 100) | @Override
method getPageTitle (line 105) | @Nullable
FILE: layout/src/main/java/me/shouheng/layout/view/scrolling/ScrollingActivity.java
class ScrollingActivity (line 14) | @Route(path = BaseConstants.LAYOUT_SCROLLING)
method getLayoutResId (line 17) | @Override
method doCreateView (line 22) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/support28/BottomAppBarActivity.java
class BottomAppBarActivity (line 24) | @Route(path = BaseConstants.LAYOUT_BOTTOM_APP_BAR)
method getLayoutResId (line 27) | @Override
method doCreateView (line 32) | @Override
class Adapter (line 43) | private static class Adapter extends BaseQuickAdapter<String, BaseView...
method Adapter (line 45) | Adapter(@Nullable List<String> data) {
method convert (line 49) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/support28/Support28Activity.java
class Support28Activity (line 16) | @Route(path = BaseConstants.LAYOUT_SUPPORT_28)
method getLayoutResId (line 19) | @Override
method doCreateView (line 24) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/swipe/SwipeBackDemoActivity.java
class SwipeBackDemoActivity (line 14) | @Route(path = BaseConstants.LAYOUT_SWIPE_BACK)
method onCreate (line 17) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/tabbed/TabbedActivity.java
class TabbedActivity (line 18) | @Route(path = BaseConstants.LAYOUT_TABBED)
method getLayoutResId (line 21) | @Override
method doCreateView (line 26) | @Override
class SectionsPagerAdapter (line 41) | public class SectionsPagerAdapter extends FragmentPagerAdapter {
method SectionsPagerAdapter (line 43) | SectionsPagerAdapter(FragmentManager fm) {
method getItem (line 47) | @Override
method getCount (line 57) | @Override
method getPageTitle (line 62) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/views/CustomView.java
class CustomView (line 13) | public class CustomView extends View {
method CustomView (line 17) | public CustomView(Context context) {
method CustomView (line 21) | public CustomView(Context context, @Nullable AttributeSet attrs) {
method CustomView (line 25) | public CustomView(Context context, @Nullable AttributeSet attrs, int d...
method computeScroll (line 29) | @Override
method smoothScrollTo (line 38) | public void smoothScrollTo(int descX, int descY) {
FILE: layout/src/main/java/me/shouheng/layout/view/views/ViewAnimateActivity.java
class ViewAnimateActivity (line 26) | @Route(path = BaseConstants.LAYOUT_VIEW_ANIMATE)
method getLayoutResId (line 31) | @Override
method doCreateView (line 36) | @Override
class DateEvaluator (line 62) | private static class DateEvaluator implements TypeEvaluator<Date> {
method evaluate (line 64) | @Override
method animate (line 71) | private void animate() {
method shake (line 81) | private void shake() {
method onPause (line 85) | @Override
FILE: layout/src/main/java/me/shouheng/layout/view/views/ViewSystemActivity.java
class ViewSystemActivity (line 25) | @Route(path = BaseConstants.LAYOUT_VIEW_SYSTEM)
method getLayoutResId (line 34) | @Override
method doCreateView (line 39) | @SuppressLint("ClickableViewAccessibility")
class MyOnGestureListener (line 84) | private class MyOnGestureListener extends GestureDetector.SimpleOnGest...
method onSingleTapUp (line 86) | @Override
method onLongPress (line 92) | @Override
method onDoubleTap (line 97) | @Override
method onFling (line 103) | @Override
method dispCoordinate (line 110) | private void dispCoordinate(MotionEvent event) {
method layoutMove (line 128) | private void layoutMove(MotionEvent event) {
method offsetMove (line 147) | private void offsetMove(MotionEvent event) {
method lpMove (line 164) | private void lpMove(MotionEvent event) {
method scrollByMove (line 183) | private void scrollByMove(MotionEvent event) {
method scrollToMove (line 199) | private void scrollToMove(MotionEvent event) {
method scrollerMove (line 216) | private void scrollerMove() {
method onDestroy (line 220) | @Override
method dispatchTouchEvent (line 227) | @Override
FILE: layout/src/test/java/me/shouheng/layout/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method dpTestCase1 (line 14) | @Test
method dpTestCase2 (line 22) | @Test
FILE: libraries/src/main/java/me/shouheng/libraries/FingerprintIdentifyActivity.java
class FingerprintIdentifyActivity (line 19) | @Route(path = BaseConstants.LIBRARY_FINGERPRIINT_IDENTIFY)
method getLayoutResId (line 26) | @Override
method doCreateView (line 31) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/MenuActivity.java
class MenuActivity (line 21) | @Route(path = BaseConstants.LIBRARY_MENU)
method getLayoutResId (line 24) | @Override
method doCreateView (line 29) | @Override
method imageCompress (line 79) | public void imageCompress(View view) {
method configToolbar (line 85) | private void configToolbar() {
method onOptionsItemSelected (line 97) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/ModuleLibraryApp.java
class ModuleLibraryApp (line 11) | public class ModuleLibraryApp extends BaseApplication {
method getContext (line 15) | public static ModuleLibraryApp getContext() {
method onCreate (line 19) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/MyKnifeActivity.java
class MyKnifeActivity (line 16) | @Route(path = BaseConstants.LIBRARY_MY_KNIFE)
method OnClick (line 23) | public void OnClick() {
method getLayoutResId (line 27) | @Override
method doCreateView (line 32) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/TimberActivity.java
class TimberActivity (line 16) | @Route(path = BaseConstants.LIBRARY_TIMBER)
method getLayoutResId (line 19) | @Override
method doCreateView (line 24) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/eventbus/EventBusActivity1.java
class EventBusActivity1 (line 20) | @Route(path = BaseConstants.LIBRARY_EVENT_BUS_ACTIVITY1)
method getLayoutResId (line 25) | @Override
method doCreateView (line 30) | @Override
method configToolbar (line 43) | private void configToolbar() {
method onOptionsItemSelected (line 55) | @Override
method onDestroy (line 65) | @Override
method onGetMessage (line 71) | @Subscribe(threadMode = ThreadMode.POSTING, priority = 0)
method onGetStickyEvent (line 76) | @Subscribe(threadMode = ThreadMode.POSTING, sticky = true, priority = 1)
FILE: libraries/src/main/java/me/shouheng/libraries/eventbus/EventBusActivity2.java
class EventBusActivity2 (line 20) | @Route(path = BaseConstants.LIBRARY_EVENT_BUS_ACTIVITY2)
method getLayoutResId (line 23) | @Override
method doCreateView (line 28) | @Override
method publishContent (line 42) | private void publishContent() {
method publishStickyontent (line 48) | private void publishStickyontent() {
method configToolbar (line 54) | private void configToolbar() {
method onOptionsItemSelected (line 66) | @Override
method onGetMessage (line 76) | @Subscribe(threadMode = ThreadMode.MAIN)
method onDestroy (line 81) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/eventbus/MessageWrap.java
class MessageWrap (line 7) | public class MessageWrap {
method getInstance (line 11) | public static MessageWrap getInstance(String message) {
method MessageWrap (line 15) | private MessageWrap(String message) {
FILE: libraries/src/main/java/me/shouheng/libraries/handler/FileRecognizeTask.java
class FileRecognizeTask (line 13) | public class FileRecognizeTask extends IntentService {
method start (line 15) | public static void start(Context context) {
method FileRecognizeTask (line 20) | public FileRecognizeTask() {
method onHandleIntent (line 25) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/handler/HandlerActivity.java
class HandlerActivity (line 20) | @Route(path = BaseConstants.LIBRARY_HANDLER)
method handleMessage (line 26) | @Override
method getLayoutResId (line 36) | @Override
method doCreateView (line 41) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/image/ClipPictureActivity.java
class ClipPictureActivity (line 17) | @Route(path = BaseConstants.LIBRARY_CLIP_PIC)
method getLayoutResId (line 20) | @Override
method doCreateView (line 25) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/image/ImageCompressActivity.java
class ImageCompressActivity (line 28) | @Route(path = BaseConstants.LIBRARY_COMPRESS)
method getLayoutResId (line 36) | @Override
method doCreateView (line 41) | @Override
method compressAlgorithm (line 52) | public void compressAlgorithm(View view) throws IOException {
method scaleCompressAlgorithm (line 86) | public void scaleCompressAlgorithm(View view) throws IOException {
method getOriginalOptions (line 113) | private BitmapFactory.Options getOriginalOptions(int resId) {
method getOriginalOptions (line 121) | private BitmapFactory.Options getOriginalOptions(String saveFilePath) {
method saveToFileSystem (line 129) | private void saveToFileSystem(File file, ByteArrayOutputStream stream)...
method saveToFileSystem (line 137) | private void saveToFileSystem(File file, Bitmap bitmap) throws IOExcep...
method rotatingImage (line 143) | private Bitmap rotatingImage(Bitmap bitmap, int angle) {
FILE: libraries/src/main/java/me/shouheng/libraries/rxjava/DemoFragment.java
class DemoFragment (line 18) | @Route(path = BaseConstants.LIBRARY_FRAGMENT_DEMO)
method getLayoutResId (line 21) | @Override
method doCreateView (line 26) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/rxjava/RxBusActivity.java
class RxBusActivity (line 15) | @Route(path = BaseConstants.LIBRARY_RX_JAVA_BUS)
method getLayoutResId (line 18) | @Override
method doCreateView (line 23) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/rxjava/RxJavaActivity.java
class RxJavaActivity (line 23) | @Route(path = BaseConstants.LIBRARY_RX_JAVA)
method getLayoutResId (line 26) | @Override
method doCreateView (line 31) | @Override
FILE: libraries/src/main/java/me/shouheng/libraries/rxjava/RxMessage.java
class RxMessage (line 5) | public class RxMessage {
method RxMessage (line 9) | RxMessage(String message) {
FILE: libraries/src/main/java/me/shouheng/libraries/serial/SerializeActivity.java
class SerializeActivity (line 28) | @Route(path = BaseConstants.LIBRARY_SERIAL)
method getLayoutResId (line 31) | @Override
method doCreateView (line 36) | @Override
class Student (line 53) | public static class Student implements Serializable {
method Student (line 67) | public Student(String name, int age, Role role, IInterface i) {
method toString (line 74) | @Override
class Role (line 84) | public static class Role implements Serializable {
method Role (line 88) | public Role(String name) {
method toString (line 92) | @Override
type IInterface (line 100) | public interface IInterface extends Serializable {
method doSomething (line 101) | String doSomething();
class Monster (line 207) | public static class Monster extends BaseParcelable<Monster> {
method Monster (line 217) | public Monster(String name, int age, Weapon weapon, Date birthday, G...
method Monster (line 225) | public Monster(Parcel in) {
method toString (line 229) | @Override
class Weapon (line 241) | public static class Weapon extends BaseParcelable {
method Weapon (line 247) | public Weapon(String name) {
method Weapon (line 256) | public Weapon(Parcel in) {
method toString (line 260) | @Override
class Grade (line 268) | public static class Grade {
method Grade (line 271) | public Grade(int grade) {
method toString (line 275) | @Override
class BaseParcelable (line 284) | public static abstract class BaseParcelable<T> implements Parcelable {
method BaseParcelable (line 286) | protected BaseParcelable() { }
method BaseParcelable (line 288) | protected BaseParcelable(Parcel in) {
method describeContents (line 329) | @Override
method writeToParcel (line 334) | @Override
class CreatorFactory (line 376) | public static class CreatorFactory {
method write (line 383) | @Override
method read (line 388) | @Override
method write (line 394) | @Override
method read (line 399) | @Override
method getCreator (line 413) | public static <T extends BaseParcelable> Parcelable.Creator<T> getCr...
type TypeHandler (line 444) | public interface TypeHandler<T> {
method write (line 445) | void write(Parcel in, T t);
method read (line 446) | T read(Parcel in);
method addTypeHandler (line 456) | public static <T> void addTypeHandler(Class<T> type, TypeHandler<T> ...
FILE: libraries/src/main/java/me/shouheng/libraries/serial/SerializeUtils.java
class SerializeUtils (line 18) | public class SerializeUtils {
method bytesToHex (line 22) | public static String bytesToHex(byte[] bytes) {
method hexStringToByteArray (line 32) | public static byte[] hexStringToByteArray(String s) {
method convertFromString (line 42) | private static Object convertFromString(String text) {
method convertToString (line 63) | private static String convertToString(Object obj) {
method putString (line 90) | public static void putString(String key, String text) {
method getString (line 98) | public static String getString(String key, String defaultValue) {
method remove (line 104) | public static void remove(String key) {
method setStudent (line 112) | public static void setStudent(SerializeActivity.Student user) {
method getStudent (line 123) | public static SerializeActivity.Student getStudent() {
FILE: libraries/src/main/java/me/shouheng/libraries/workmanager/PeriodicTask.java
class PeriodicTask (line 15) | public class PeriodicTask extends Worker {
method PeriodicTask (line 21) | public PeriodicTask(@NonNull Context context, @NonNull WorkerParameter...
method doWork (line 25) | @NonNull
FILE: libraries/src/main/java/me/shouheng/libraries/workmanager/SingleTask.java
class SingleTask (line 15) | public class SingleTask extends Worker {
method SingleTask (line 17) | public SingleTask(@NonNull Context context, @NonNull WorkerParameters ...
method doWork (line 21) | @NonNull
FILE: libraries/src/main/java/me/shouheng/libraries/workmanager/SingleTask2.java
class SingleTask2 (line 15) | public class SingleTask2 extends Worker {
method SingleTask2 (line 17) | public SingleTask2(@NonNull Context context, @NonNull WorkerParameters...
method doWork (line 21) | @NonNull
FILE: libraries/src/main/java/me/shouheng/libraries/workmanager/WorkManagerActivity.java
class WorkManagerActivity (line 29) | @Route(path = BaseConstants.LIBRARY_WORK_MANAGER)
method getLayoutResId (line 37) | @Override
method doCreateView (line 51) | @Override
FILE: live/src/androidTest/java/me/shouheng/live/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: live/src/main/java/me/shouheng/live/LiveModuleApp.java
class LiveModuleApp (line 11) | public class LiveModuleApp extends BaseApplication {
method getContext (line 15) | public static LiveModuleApp getContext() {
method onCreate (line 19) | @Override
FILE: live/src/main/java/me/shouheng/live/common/DecimalFormatUtil.java
class DecimalFormatUtil (line 5) | public class DecimalFormatUtil {
method formatW (line 9) | public static String formatW(int vaule){
method format (line 17) | public static String format(float vaule, String pattern){
FILE: live/src/main/java/me/shouheng/live/common/widget/FlutteringLayout.java
class FlutteringLayout (line 35) | public class FlutteringLayout extends RelativeLayout {
method FlutteringLayout (line 82) | public FlutteringLayout(@NonNull Context context) {
method FlutteringLayout (line 86) | public FlutteringLayout(@NonNull Context context, @Nullable AttributeS...
method FlutteringLayout (line 90) | public FlutteringLayout(@NonNull Context context, @Nullable AttributeS...
method init (line 95) | private void init(Context context,AttributeSet attrs){
method onMeasure (line 116) | @Override
method addHeart (line 128) | public void addHeart() {
method getHeartView (line 145) | private ImageView getHeartView(@DrawableRes int resId){
method getEnterAnimator (line 158) | private AnimatorSet getEnterAnimator(View target){
method getBezierCurveAnimator (line 178) | private ValueAnimator getBezierCurveAnimator(final View target){
method getAnimator (line 221) | private Animator getAnimator(View target){
method makeMeasureSpec (line 233) | private void makeMeasureSpec(View target){
method updateStartPointF (line 243) | private void updateStartPointF(View target){
method randomPointF (line 261) | private PointF randomPointF(float scale){
method randomInterpolator (line 273) | private Interpolator randomInterpolator(){
method randomHeartResource (line 281) | private int randomHeartResource(){
method getHeartRes (line 285) | public int[] getHeartRes() {
method setHeartRes (line 289) | public void setHeartRes(int[] heartRes) {
method getInterpolators (line 293) | public Interpolator[] getInterpolators() {
method setInterpolators (line 297) | public void setInterpolators(Interpolator[] interpolators) {
method getEnterDuration (line 301) | public int getEnterDuration() {
method setEnterDuration (line 305) | public void setEnterDuration(int enterDuration) {
method getDuration (line 309) | public int getDuration() {
method setDuration (line 313) | public void setDuration(int duration) {
method getScale (line 317) | public float getScale() {
method setScale (line 321) | public void setScale(float scale) {
method setHeartLayoutParams (line 325) | public void setHeartLayoutParams(LayoutParams params){
method getHeartLayoutParams (line 329) | public LayoutParams getHeartLayoutParams(){
method isSameSize (line 333) | public boolean isSameSize() {
method setSameSize (line 337) | public void setSameSize(boolean isSameSize) {
class EndAnimatorListener (line 341) | private class EndAnimatorListener extends AnimatorListenerAdapter {
method EndAnimatorListener (line 345) | public EndAnimatorListener(View target){
method onAnimationEnd (line 349) | @Override
FILE: live/src/main/java/me/shouheng/live/model/LiveService.java
type LiveService (line 14) | public interface LiveService {
method getAppStartInfo (line 16) | @GET("json/page/app-data/info.json?v=3.0.1&os=1&ver=4")
method getRecommend (line 19) | @GET("json/app/index/recommend/list-android.json?v=3.0.1&os=1&ver=4")
method enterRoom (line 22) | @GET("json/rooms/{uid}/info.json?v=3.0.1&os=1&ver=4")
FILE: live/src/main/java/me/shouheng/live/model/data/AppStart.java
class AppStart (line 7) | public class AppStart {
method getAndroidstart (line 44) | public List<AndroidstartBean> getAndroidstart() {
method setAndroidstart (line 48) | public void setAndroidstart(List<AndroidstartBean> androidstart) {
method getBanners (line 52) | public List<Banner> getBanners() {
method setBanners (line 56) | public void setBanners(List<Banner> banners) {
class AndroidstartBean (line 60) | public static class AndroidstartBean {
method getId (line 80) | public int getId() {
method setId (line 84) | public void setId(int id) {
method getTitle (line 88) | public String getTitle() {
method setTitle (line 92) | public void setTitle(String title) {
method getThumb (line 96) | public String getThumb() {
method setThumb (line 100) | public void setThumb(String thumb) {
method getLink (line 104) | public String getLink() {
method setLink (line 108) | public void setLink(String link) {
method getCreate_at (line 112) | public String getCreate_at() {
method setCreate_at (line 116) | public void setCreate_at(String create_at) {
method getStatus (line 120) | public int getStatus() {
method setStatus (line 124) | public void setStatus(int status) {
method getFk (line 128) | public String getFk() {
method setFk (line 132) | public void setFk(String fk) {
method getSubtitle (line 136) | public String getSubtitle() {
method setSubtitle (line 140) | public void setSubtitle(String subtitle) {
method getContent (line 144) | public String getContent() {
method setContent (line 148) | public void setContent(String content) {
method getExt (line 152) | public ExtBean getExt() {
method setExt (line 156) | public void setExt(ExtBean ext) {
method getSlot_id (line 160) | public int getSlot_id() {
method setSlot_id (line 164) | public void setSlot_id(int slot_id) {
method getPriority (line 168) | public int getPriority() {
method setPriority (line 172) | public void setPriority(int priority) {
class ExtBean (line 176) | public static class ExtBean {
method getType (line 181) | public String getType() {
method setType (line 185) | public void setType(String type) {
method getTime (line 189) | public String getTime() {
method setTime (line 193) | public void setTime(String time) {
method getEnd_time (line 197) | public int getEnd_time() {
method setEnd_time (line 201) | public void setEnd_time(int end_time) {
method toString (line 205) | @Override
method toString (line 215) | @Override
method toString (line 234) | @Override
FILE: live/src/main/java/me/shouheng/live/model/data/Banner.java
class Banner (line 3) | public class Banner {
method getId (line 77) | public int getId() {
method setId (line 81) | public void setId(int id) {
method getTitle (line 85) | public String getTitle() {
method setTitle (line 89) | public void setTitle(String title) {
method getThumb (line 93) | public String getThumb() {
method setThumb (line 97) | public void setThumb(String thumb) {
method getLink (line 101) | public String getLink() {
method setLink (line 105) | public void setLink(String link) {
method getCreate_at (line 109) | public String getCreate_at() {
method setCreate_at (line 113) | public void setCreate_at(String create_at) {
method getStatus (line 117) | public int getStatus() {
method setStatus (line 121) | public void setStatus(int status) {
method getFk (line 125) | public String getFk() {
method setFk (line 129) | public void setFk(String fk) {
method getSubtitle (line 133) | public String getSubtitle() {
method setSubtitle (line 137) | public void setSubtitle(String subtitle) {
method getContent (line 141) | public String getContent() {
method setContent (line 145) | public void setContent(String content) {
method getExt (line 149) | public ExtBean getExt() {
method setExt (line 153) | public void setExt(ExtBean ext) {
method getSlot_id (line 157) | public int getSlot_id() {
method setSlot_id (line 161) | public void setSlot_id(int slot_id) {
method getPriority (line 165) | public int getPriority() {
method setPriority (line 169) | public void setPriority(int priority) {
method getLink_object (line 173) | public LiveInfo getLink_object() {
method setLink_object (line 177) | public void setLink_object(LiveInfo link_object) {
method isRoom (line 181) | public boolean isRoom(){
class ExtBean (line 189) | public static class ExtBean {
method getType (line 192) | public String getType() {
method setType (line 196) | public void setType(String type) {
method toString (line 200) | @Override
method toString (line 208) | @Override
FILE: live/src/main/java/me/shouheng/live/model/data/LiveInfo.java
class LiveInfo (line 5) | public class LiveInfo {
method LiveInfo (line 44) | public LiveInfo(String no, String nick, String avatar, int follow, Str...
method LiveInfo (line 91) | public LiveInfo() {
method getNo (line 94) | public String getNo() {
method setNo (line 98) | public void setNo(String no) {
method getNick (line 102) | public String getNick() {
method setNick (line 106) | public void setNick(String nick) {
method getAvatar (line 110) | public String getAvatar() {
method setAvatar (line 114) | public void setAvatar(String avatar) {
method getFollow (line 118) | public int getFollow() {
method setFollow (line 122) | public void setFollow(int follow) {
method getId (line 126) | public String getId() {
method setId (line 130) | public void setId(String id) {
method getUid (line 134) | public String getUid() {
method setUid (line 138) | public void setUid(String uid) {
method getTitle (line 142) | public String getTitle() {
method setTitle (line 146) | public void setTitle(String title) {
method getCategory_id (line 150) | public String getCategory_id() {
method setCategory_id (line 154) | public void setCategory_id(String category_id) {
method getSlug (line 158) | public String getSlug() {
method setSlug (line 162) | public void setSlug(String slug) {
method getIntro (line 166) | public String getIntro() {
method setIntro (line 170) | public void setIntro(String intro) {
method getAnnouncement (line 174) | public String getAnnouncement() {
method setAnnouncement (line 178) | public void setAnnouncement(String announcement) {
method getCover (line 182) | public String getCover() {
method setCover (line 186) | public void setCover(String cover) {
method getPlay_at (line 190) | public String getPlay_at() {
method setPlay_at (line 194) | public void setPlay_at(String play_at) {
method getLast_play_at (line 198) | public String getLast_play_at() {
method setLast_play_at (line 202) | public void setLast_play_at(String last_play_at) {
method getView (line 206) | public String getView() {
method setView (line 210) | public void setView(String view) {
method getViews (line 214) | public String getViews() {
method getStatus (line 227) | public String getStatus() {
method setStatus (line 231) | public void setStatus(String status) {
method getPriv (line 235) | public String getPriv() {
method setPriv (line 239) | public void setPriv(String priv) {
method getLandscape (line 243) | public String getLandscape() {
method setLandscape (line 247) | public void setLandscape(String landscape) {
method getPosition (line 251) | public String getPosition() {
method setPosition (line 255) | public void setPosition(String position) {
method getWeight (line 259) | public String getWeight() {
method setWeight (line 263) | public void setWeight(String weight) {
method getCheck (line 267) | public String getCheck() {
method setCheck (line 271) | public void setCheck(String check) {
method getRecommend_image (line 275) | public String getRecommend_image() {
method setRecommend_image (line 279) | public void setRecommend_image(String recommend_image) {
method getVideoQuality (line 283) | public String getVideoQuality() {
method setVideoQuality (line 287) | public void setVideoQuality(String videoQuality) {
method getCategory_name (line 291) | public String getCategory_name() {
method setCategory_name (line 295) | public void setCategory_name(String category_name) {
method getScreen (line 299) | public int getScreen() {
method setScreen (line 303) | public void setScreen(int screen) {
method getStart_time (line 307) | public String getStart_time() {
method setStart_time (line 311) | public void setStart_time(String start_time) {
method getStream (line 315) | public String getStream() {
method setStream (line 319) | public void setStream(String stream) {
method getThumb (line 323) | public String getThumb() {
method setThumb (line 327) | public void setThumb(String thumb) {
method getVideo (line 331) | public String getVideo() {
method setVideo (line 335) | public void setVideo(String video) {
method getApp_shuffling_image (line 339) | public String getApp_shuffling_image() {
method setApp_shuffling_image (line 343) | public void setApp_shuffling_image(String app_shuffling_image) {
method getCategoryId (line 347) | public String getCategoryId() {
method setCategoryId (line 351) | public void setCategoryId(String categoryId) {
method isHidden (line 355) | public boolean isHidden() {
method setHidden (line 359) | public void setHidden(boolean hidden) {
method isPlay_status (line 363) | public boolean isPlay_status() {
method setPlay_status (line 367) | public void setPlay_status(boolean play_status) {
method getIcontext (line 371) | public String getIcontext() {
method setIcontext (line 375) | public void setIcontext(String icontext) {
method getCategory_slug (line 379) | public String getCategory_slug() {
method setCategory_slug (line 383) | public void setCategory_slug(String category_slug) {
method getHidden (line 387) | public boolean getHidden() {
method getPlay_status (line 391) | public boolean getPlay_status() {
method getLove_cover (line 395) | public String getLove_cover() {
method setLove_cover (line 399) | public void setLove_cover(String love_cover) {
method toString (line 403) | @Override
FILE: live/src/main/java/me/shouheng/live/model/data/Recommend.java
class Recommend (line 7) | public class Recommend {
method getRoom (line 24) | public List<RoomBean> getRoom() {
method setRoom (line 28) | public void setRoom(List<RoomBean> room) {
method getAd (line 32) | public List<?> getAd() {
method setAd (line 36) | public void setAd(List<?> ad) {
class RoomBean (line 40) | public static class RoomBean {
method getId (line 96) | public int getId() {
method setId (line 100) | public void setId(int id) {
method getName (line 104) | public String getName() {
method setName (line 108) | public void setName(String name) {
method getIs_default (line 112) | public int getIs_default() {
method setIs_default (line 116) | public void setIs_default(int is_default) {
method getIcon (line 120) | public String getIcon() {
method setIcon (line 124) | public void setIcon(String icon) {
method getSlug (line 128) | public String getSlug() {
method setSlug (line 132) | public void setSlug(String slug) {
method getCategory_more (line 136) | public String getCategory_more() {
method setCategory_more (line 140) | public void setCategory_more(String category_more) {
method getType (line 144) | public int getType() {
method setType (line 148) | public void setType(int type) {
method getScreen (line 152) | public int getScreen() {
method setScreen (line 156) | public void setScreen(int screen) {
method getList (line 160) | public List<ListBean> getList() {
method setList (line 164) | public void setList(List<ListBean> list) {
class ListBean (line 168) | public static class ListBean {
method getBeauty_cover (line 212) | public String getBeauty_cover() {
method setBeauty_cover (line 216) | public void setBeauty_cover(String beauty_cover) {
method getNo (line 220) | public int getNo() {
method setNo (line 224) | public void setNo(int no) {
method getFirst_play_at (line 228) | public String getFirst_play_at() {
method setFirst_play_at (line 232) | public void setFirst_play_at(String first_play_at) {
method getCategory_name (line 236) | public String getCategory_name() {
method setCategory_name (line 240) | public void setCategory_name(String category_name) {
method getThumb (line 244) | public String getThumb() {
method setThumb (line 248) | public void setThumb(String thumb) {
method getLast_play_at (line 252) | public String getLast_play_at() {
method setLast_play_at (line 256) | public void setLast_play_at(String last_play_at) {
method getScreen (line 260) | public int getScreen() {
method setScreen (line 264) | public void setScreen(int screen) {
method getVideo (line 268) | public String getVideo() {
method setVideo (line 272) | public void setVideo(String video) {
method getTitle (line 276) | public String getTitle() {
method setTitle (line 280) | public void setTitle(String title) {
method getRecommend_image (line 284) | public String getRecommend_image() {
method setRecommend_image (line 288) | public void setRecommend_image(String recommend_image) {
method isIs_shield (line 292) | public boolean isIs_shield() {
method setIs_shield (line 296) | public void setIs_shield(boolean is_shield) {
method getNick (line 300) | public String getNick() {
method setNick (line 304) | public void setNick(String nick) {
method getUid (line 308) | public int getUid() {
method setUid (line 312) | public void setUid(int uid) {
method getView (line 316) | public String getView() {
method getViews (line 321) | public String getViews() {
method setView (line 333) | public void setView(String view) {
method getCategory_id (line 337) | public int getCategory_id() {
method setCategory_id (line 341) | public void setCategory_id(int category_id) {
method getStream (line 345) | public String getStream() {
method setStream (line 349) | public void setStream(String stream) {
method getSlug (line 353) | public String getSlug() {
method setSlug (line 357) | public void setSlug(String slug) {
method getLove_cover (line 361) | public String getLove_cover() {
method setLove_cover (line 365) | public void setLove_cover(String love_cover) {
method getLevel (line 369) | public int getLevel() {
method setLevel (line 373) | public void setLevel(int level) {
method getLike (line 377) | public int getLike() {
method setLike (line 381) | public void setLike(int like) {
method getVideo_quality (line 385) | public Object getVideo_quality() {
method setVideo_quality (line 389) | public void setVideo_quality(Object video_quality) {
method getWeight (line 393) | public int getWeight() {
method setWeight (line 397) | public void setWeight(int weight) {
method getStarlight (line 401) | public int getStarlight() {
method setStarlight (line 405) | public void setStarlight(int starlight) {
method isCheck (line 409) | public boolean isCheck() {
method setCheck (line 413) | public void setCheck(boolean check) {
method getAvatar (line 417) | public String getAvatar() {
method setAvatar (line 421) | public void setAvatar(String avatar) {
method getFollow (line 425) | public int getFollow() {
method setFollow (line 429) | public void setFollow(int follow) {
method getPlay_count (line 433) | public int getPlay_count() {
method setPlay_count (line 437) | public void setPlay_count(int play_count) {
method getPlay_true (line 441) | public int getPlay_true() {
method setPlay_true (line 445) | public void setPlay_true(int play_true) {
method getFans (line 449) | public int getFans() {
method setFans (line 453) | public void setFans(int fans) {
method getMax_view (line 457) | public int getMax_view() {
method setMax_view (line 461) | public void setMax_view(int max_view) {
method getDefault_image (line 465) | public String getDefault_image() {
method setDefault_image (line 469) | public void setDefault_image(String default_image) {
method getLast_end_at (line 473) | public String getLast_end_at() {
method setLast_end_at (line 477) | public void setLast_end_at(String last_end_at) {
method getPosition (line 481) | public String getPosition() {
method setPosition (line 485) | public void setPosition(String position) {
method getCreate_at (line 489) | public String getCreate_at() {
method setCreate_at (line 493) | public void setCreate_at(String create_at) {
method getLast_thumb (line 497) | public String getLast_thumb() {
method setLast_thumb (line 501) | public void setLast_thumb(String last_thumb) {
method getLandscape (line 505) | public int getLandscape() {
method setLandscape (line 509) | public void setLandscape(int landscape) {
method getCategory_slug (line 513) | public String getCategory_slug() {
method setCategory_slug (line 517) | public void setCategory_slug(String category_slug) {
method getAnniversary (line 521) | public int getAnniversary() {
method setAnniversary (line 525) | public void setAnniversary(int anniversary) {
method isPlay_status (line 529) | public boolean isPlay_status() {
method setPlay_status (line 533) | public void setPlay_status(boolean play_status) {
method getStatus (line 537) | public int getStatus() {
method setStatus (line 541) | public void setStatus(int status) {
method getCoin (line 545) | public int getCoin() {
method setCoin (line 549) | public void setCoin(int coin) {
method getLink (line 553) | public String getLink() {
method setLink (line 557) | public void setLink(String link) {
method toString (line 562) | @Override
method toString (line 578) | @Override
FILE: live/src/main/java/me/shouheng/live/model/data/Room.java
class Room (line 5) | public class Room {
method getUid (line 111) | public int getUid() {
method setUid (line 115) | public void setUid(int uid) {
method getNo (line 119) | public int getNo() {
method setNo (line 123) | public void setNo(int no) {
method getTitle (line 127) | public String getTitle() {
method setTitle (line 131) | public void setTitle(String title) {
method getNick (line 135) | public String getNick() {
method setNick (line 139) | public void setNick(String nick) {
method getAvatar (line 143) | public String getAvatar() {
method setAvatar (line 147) | public void setAvatar(String avatar) {
method getSlug (line 151) | public String getSlug() {
method setSlug (line 155) | public void setSlug(String slug) {
method getIntro (line 159) | public String getIntro() {
method setIntro (line 163) | public void setIntro(String intro) {
method getCategory_id (line 167) | public String getCategory_id() {
method setCategory_id (line 171) | public void setCategory_id(String category_id) {
method getCategory_name (line 175) | public String getCategory_name() {
method setCategory_name (line 179) | public void setCategory_name(String category_name) {
method getScreen (line 183) | public int getScreen() {
method setScreen (line 187) | public void setScreen(int screen) {
method getView (line 191) | public int getView() {
method setView (line 195) | public void setView(int view) {
method getWeight (line 199) | public int getWeight() {
method setWeight (line 203) | public void setWeight(int weight) {
method getFollow (line 207) | public int getFollow() {
method setFollow (line 211) | public void setFollow(int follow) {
method getLast_play_at (line 215) | public String getLast_play_at() {
method setLast_play_at (line 219) | public void setLast_play_at(String last_play_at) {
method getAnnouncement (line 223) | public String getAnnouncement() {
method setAnnouncement (line 227) | public void setAnnouncement(String announcement) {
method getPlay_at (line 231) | public String getPlay_at() {
method setPlay_at (line 235) | public void setPlay_at(String play_at) {
method getThumb (line 239) | public String getThumb() {
method setThumb (line 243) | public void setThumb(String thumb) {
method getStatus (line 247) | public String getStatus() {
method setStatus (line 251) | public void setStatus(String status) {
method isPlay_status (line 255) | public boolean isPlay_status() {
method setPlay_status (line 259) | public void setPlay_status(boolean play_status) {
method isForbid_status (line 263) | public boolean isForbid_status() {
method setForbid_status (line 267) | public void setForbid_status(boolean forbid_status) {
method isPolice_forbid (line 271) | public boolean isPolice_forbid() {
method setPolice_forbid (line 275) | public void setPolice_forbid(boolean police_forbid) {
method isHidden (line 279) | public boolean isHidden() {
method setHidden (line 283) | public void setHidden(boolean hidden) {
method getVideo_quality (line 287) | public String getVideo_quality() {
method setVideo_quality (line 291) | public void setVideo_quality(String video_quality) {
method getLive (line 295) | public LiveBean getLive() {
method setLive (line 299) | public void setLive(LiveBean live) {
method isIs_star (line 303) | public boolean isIs_star() {
method setIs_star (line 307) | public void setIs_star(boolean is_star) {
method getSpecial (line 311) | public Object getSpecial() {
method setSpecial (line 315) | public void setSpecial(Object special) {
method getWatermark (line 319) | public int getWatermark() {
method setWatermark (line 323) | public void setWatermark(int watermark) {
method getWatermark_pic (line 327) | public String getWatermark_pic() {
method setWatermark_pic (line 331) | public void setWatermark_pic(String watermark_pic) {
method getGirl_rank (line 335) | public GirlRankBean getGirl_rank() {
method setGirl_rank (line 339) | public void setGirl_rank(GirlRankBean girl_rank) {
method getAdmins (line 343) | public List<?> getAdmins() {
method setAdmins (line 347) | public void setAdmins(List<?> admins) {
method getNotice (line 351) | public List<?> getNotice() {
method setNotice (line 355) | public void setNotice(List<?> notice) {
method getRoom_lines (line 359) | public List<RoomLine> getRoom_lines() {
method setRoom_lines (line 363) | public void setRoom_lines(List<RoomLine> room_lines) {
method getHot_word (line 367) | public List<String> getHot_word() {
method setHot_word (line 371) | public void setHot_word(List<String> hot_word) {
method getRank_week (line 375) | public List<?> getRank_week() {
method setRank_week (line 379) | public void setRank_week(List<?> rank_week) {
method getRank_total (line 383) | public List<?> getRank_total() {
method setRank_total (line 387) | public void setRank_total(List<?> rank_total) {
method getRank_curr (line 391) | public List<RankCurrBean> getRank_curr() {
method setRank_curr (line 395) | public void setRank_curr(List<RankCurrBean> rank_curr) {
class LiveBean (line 399) | public static class LiveBean {
method getWs (line 411) | public RoomLine getWs() {
method setWs (line 415) | public void setWs(RoomLine ws) {
class GirlRankBean (line 648) | public static class GirlRankBean {
method getCurAnchorInfo (line 672) | public CurAnchorInfoBean getCurAnchorInfo() {
method setCurAnchorInfo (line 676) | public void setCurAnchorInfo(CurAnchorInfoBean curAnchorInfo) {
method getRank (line 680) | public List<Rank> getRank() {
method setRank (line 684) | public void setRank(List<Rank> rank) {
class CurAnchorInfoBean (line 688) | public static class CurAnchorInfoBean {
method getAvatar (line 698) | public String getAvatar() {
method setAvatar (line 702) | public void setAvatar(String avatar) {
method getNick (line 706) | public String getNick() {
method setNick (line 710) | public void setNick(String nick) {
method getUid (line 714) | public int getUid() {
method setUid (line 718) | public void setUid(int uid) {
method getNo (line 722) | public int getNo() {
method setNo (line 726) | public void setNo(int no) {
method getVotes (line 730) | public int getVotes() {
method setVotes (line 734) | public void setVotes(int votes) {
method getRank (line 738) | public int getRank() {
method setRank (line 742) | public void setRank(int rank) {
method getToPre (line 746) | public int getToPre() {
method setToPre (line 750) | public void setToPre(int toPre) {
method getRankType (line 754) | public String getRankType() {
method setRankType (line 758) | public void setRankType(String rankType) {
class Rank (line 763) | public static class Rank {
method getAvatar (line 771) | public String getAvatar() {
method setAvatar (line 775) | public void setAvatar(String avatar) {
method getNick (line 779) | public String getNick() {
method setNick (line 783) | public void setNick(String nick) {
method getUid (line 787) | public int getUid() {
method setUid (line 791) | public void setUid(int uid) {
method getVotes (line 795) | public int getVotes() {
method setVotes (line 799) | public void setVotes(int votes) {
method getNo (line 803) | public int getNo() {
method setNo (line 807) | public void setNo(int no) {
method getStatus (line 811) | public int getStatus() {
method setStatus (line 815) | public void setStatus(int status) {
class RankCurrBean (line 821) | public static class RankCurrBean {
method getSend_uid (line 829) | public String getSend_uid() {
method setSend_uid (line 833) | public void setSend_uid(String send_uid) {
method getSend_nick (line 837) | public String getSend_nick() {
method setSend_nick (line 841) | public void setSend_nick(String send_nick) {
method getAvatar (line 845) | public String getAvatar() {
method setAvatar (line 849) | public void setAvatar(String avatar) {
method getRank (line 853) | public int getRank() {
method setRank (line 857) | public void setRank(int rank) {
method getScore (line 861) | public int getScore() {
method setScore (line 865) | public void setScore(int score) {
method getIcon (line 869) | public String getIcon() {
method setIcon (line 873) | public void setIcon(String icon) {
method toString (line 879) | @Override
FILE: live/src/main/java/me/shouheng/live/model/data/RoomLine.java
class RoomLine (line 5) | public class RoomLine {
method getHls (line 46) | public HlsBean getHls() {
method setHls (line 50) | public void setHls(HlsBean hls) {
method getDef_mobile (line 54) | public String getDef_mobile() {
method setDef_mobile (line 58) | public void setDef_mobile(String def_mobile) {
method getDef_pc (line 62) | public String getDef_pc() {
method setDef_pc (line 66) | public void setDef_pc(String def_pc) {
method getV (line 70) | public String getV() {
method setV (line 74) | public void setV(String v) {
method getFlv (line 78) | public FlvBean getFlv() {
method setFlv (line 82) | public void setFlv(FlvBean flv) {
method getName (line 86) | public String getName() {
method setName (line 90) | public void setName(String name) {
class FlvBean (line 94) | public static class FlvBean {
method getValue (line 119) | public StreamSrc getValue(boolean isShowing){
method getValue3 (line 132) | public StreamSrc getValue3() {
method setValue3 (line 136) | public void setValue3(StreamSrc value3) {
method getValue4 (line 140) | public StreamSrc getValue4() {
method setValue4 (line 144) | public void setValue4(StreamSrc value4) {
method getValue5 (line 148) | public StreamSrc getValue5() {
method setValue5 (line 152) | public void setValue5(StreamSrc value5) {
method getMain_mobile (line 156) | public int getMain_mobile() {
method setMain_mobile (line 160) | public void setMain_mobile(int main_mobile) {
method getMain_pc (line 164) | public int getMain_pc() {
method setMain_pc (line 168) | public void setMain_pc(int main_pc) {
method toString (line 172) | @Override
class HlsBean (line 185) | public static class HlsBean {
method getValue (line 211) | public StreamSrc getValue(boolean isShowing){
method getValue3 (line 224) | public StreamSrc getValue3() {
method setValue3 (line 228) | public void setValue3(StreamSrc value3) {
method getValue4 (line 232) | public StreamSrc getValue4() {
method setValue4 (line 236) | public void setValue4(StreamSrc value4) {
method getValue5 (line 240) | public StreamSrc getValue5() {
method setValue5 (line 244) | public void setValue5(StreamSrc value5) {
method getMain_mobile (line 248) | public int getMain_mobile() {
method setMain_mobile (line 252) | public void setMain_mobile(int main_mobile) {
method getMain_pc (line 256) | public int getMain_pc() {
method setMain_pc (line 260) | public void setMain_pc(int main_pc) {
method toString (line 264) | @Override
method toString (line 276) | @Override
FILE: live/src/main/java/me/shouheng/live/model/data/StreamSrc.java
class StreamSrc (line 3) | public class StreamSrc {
method getName (line 9) | public String getName() {
method setName (line 13) | public void setName(String name) {
method getSrc (line 17) | public String getSrc() {
method setSrc (line 21) | public void setSrc(String src) {
method toString (line 25) | @Override
FILE: live/src/main/java/me/shouheng/live/model/repository/LiveRetrofit.java
class LiveRetrofit (line 13) | public class LiveRetrofit {
method getLiveService (line 15) | public static LiveService getLiveService() {
method getOkHttpClient (line 25) | private static OkHttpClient getOkHttpClient() {
FILE: live/src/main/java/me/shouheng/live/view/Constant.java
class Constant (line 7) | public class Constant {
FILE: live/src/main/java/me/shouheng/live/view/activity/LiveActivity.java
class LiveActivity (line 34) | @Route(path = BaseConstants.LIVE_HOME)
method getLayoutResId (line 47) | @Override
method doCreateView (line 52) | @Override
method configToolbar (line 67) | private void configToolbar() {
method configList (line 78) | private void configList() {
method startRoom (line 92) | private void startRoom(Recommend.RoomBean.ListBean listBean) {
method configBanner (line 103) | private void configBanner() {
class ImageHolder (line 120) | public class ImageHolder implements Holder<Banner> {
method createView (line 124) | @Override
method UpdateUI (line 133) | @Override
method fetchRecommend (line 145) | private void fetchRecommend() {
method fetchAppStart (line 161) | private void fetchAppStart() {
FILE: live/src/main/java/me/shouheng/live/view/activity/LiveRoomActivity.java
class LiveRoomActivity (line 23) | @Route(path = BaseConstants.LIVE_DETAIL)
type RoomType (line 26) | public enum RoomType {
method RoomType (line 32) | RoomType(int id) {
method getTypeById (line 36) | public static RoomType getTypeById(int id) {
method getLayoutResId (line 46) | @Override
method doCreateView (line 51) | @Override
method toFragment (line 84) | private void toFragment(Fragment fragment) {
method getCurrentFragment (line 88) | private Fragment getCurrentFragment() {
method onBackPressed (line 92) | @Override
FILE: live/src/main/java/me/shouheng/live/view/adapter/RecommendAdapter.java
class RecommendAdapter (line 21) | public class RecommendAdapter extends BaseQuickAdapter<Recommend.RoomBea...
method RecommendAdapter (line 27) | public RecommendAdapter(Context context) {
method convert (line 32) | @Override
method setOnRoomClickListener (line 56) | public void setOnRoomClickListener(OnRoomClickListener onRoomClickList...
type OnRoomClickListener (line 60) | public interface OnRoomClickListener {
method onRoomClick (line 61) | void onRoomClick(Recommend.RoomBean.ListBean listBean);
FILE: live/src/main/java/me/shouheng/live/view/adapter/RecommendChildAdapter.java
class RecommendChildAdapter (line 23) | public class RecommendChildAdapter extends BaseQuickAdapter<Recommend.Ro...
method RecommendChildAdapter (line 29) | RecommendChildAdapter(Context context, List<Recommend.RoomBean.ListBea...
method convert (line 35) | @Override
method setColorPlatte (line 54) | private void setColorPlatte(Bitmap resource, BaseViewHolder helper, Re...
FILE: live/src/main/java/me/shouheng/live/view/fragment/FullscreenFragment.java
class FullscreenFragment (line 33) | @Route(path = BaseConstants.LIVE_DETAIL_FULL_SCREEN)
method getLayoutResId (line 42) | @Override
method doCreateView (line 47) | @Override
method enterRoom (line 67) | private void enterRoom() {
method playUrl (line 96) | private void playUrl(String url) {
method showVideoFragment (line 103) | private void showVideoFragment(Fragment videoFragment) {
method showRoomInfo (line 110) | private void showRoomInfo(@Nullable Room room) {
method configViews (line 124) | private void configViews() {
method onBack (line 129) | private void onBack() {
method onBackPressed (line 133) | @Override
FILE: live/src/main/java/me/shouheng/live/view/fragment/RoomFragment.java
class RoomFragment (line 37) | @Route(path = BaseConstants.LIVE_DETAIL_ROOM)
method getLayoutResId (line 46) | @Override
method doCreateView (line 51) | @Override
method enterRoom (line 68) | private void enterRoom() {
method configLayout (line 97) | private void configLayout() {
method configViews (line 106) | private void configViews() {
method playUrl (line 113) | private void playUrl(String url) {
method showRoomInfo (line 120) | private void showRoomInfo(@Nullable Room room) {
method showVideoFragment (line 133) | private void showVideoFragment(Fragment videoFragment) {
method landscape (line 140) | private boolean landscape() {
method onBack (line 144) | private void onBack() {
method onConfigurationChanged (line 152) | @Override
method onBackPressed (line 160) | @Override
FILE: live/src/main/java/me/shouheng/live/view/fragment/VideoFragment.java
class VideoFragment (line 18) | public class VideoFragment extends CommonFragment<FragmentVideoBinding> {
method newInstance (line 30) | public static VideoFragment newInstance(String url, boolean fullscreen) {
method getLayoutResId (line 39) | @Override
method doCreateView (line 44) | @Override
method handleArgument (line 51) | private void handleArgument() {
method configVideo (line 58) | private void configVideo() {
method play (line 74) | public void play(String url){
method start (line 80) | private void start(){
method pause (line 84) | public void pause(){
method stopPlayback (line 88) | public void stopPlayback(){
method seekTo (line 92) | public void seekTo(long i){
method isPlaying (line 96) | public boolean isPlaying(){
method getVideoView (line 100) | public PLVideoTextureView getVideoView(){
method getDisplayAspectRatio (line 104) | public int getDisplayAspectRatio(){
method onClickRotate (line 108) | public void onClickRotate(View v) {
method setDisplayAspectRatio (line 122) | public void setDisplayAspectRatio(int ratio){
method setDisplayOrientation (line 126) | public void setDisplayOrientation(int orientation){
method onResume (line 130) | @Override
method onPause (line 136) | @Override
method onDestroy (line 142) | @Override
FILE: live/src/main/java/me/shouheng/live/viewmodel/LiveViewModel.java
class LiveViewModel (line 21) | public class LiveViewModel extends ViewModel {
method getRecommend (line 23) | public LiveData<Resource<Recommend>> getRecommend() {
method getAppStart (line 48) | public LiveData<Resource<AppStart>> getAppStart() {
method enterRoom (line 73) | public LiveData<Resource<Room>> enterRoom(String uid) {
FILE: live/src/test/java/me/shouheng/live/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
Condensed preview — 411 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,187K chars).
[
{
"path": "README.md",
"chars": 3155,
"preview": "# Awesome Android\n\n> 该项主要用来收集和整理开发过程中经常用到的三方库和控件,并包含一些演示代码。[可以参考下文来了解更多的内容]\n\n## 代码清单\n\n### 1、整体结构\n\n```\n/-----\n /-----"
},
{
"path": "advanced/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "advanced/advanced.iml",
"chars": 19269,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\":advanced\" external.linked.project.path=\"$MOD"
},
{
"path": "advanced/build.gradle",
"chars": 2527,
"preview": "println isAdvancedModuleApp.toBoolean()\napply plugin: \"build-time-tracker\"\n\nif (isAdvancedModuleApp.toBoolean()) {\n a"
},
{
"path": "advanced/proguard-rules.pro",
"chars": 751,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "advanced/src/androidTest/java/me/shouheng/advanced/ExampleInstrumentedTest.java",
"chars": 999,
"preview": "package me.shouheng.advanced;\n\nimport android.content.Context;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n"
},
{
"path": "advanced/src/main/AndroidManifest.xml",
"chars": 951,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"me.shouheng.advanced\" >\n\n <applicat"
},
{
"path": "advanced/src/main/aidl/me/shouheng/advanced/aidl/INoteManager.aidl",
"chars": 170,
"preview": "package me.shouheng.advanced.aidl;\n\nimport me.shouheng.advanced.aidl.Note;\n\ninterface INoteManager {\n Note getNote(lo"
},
{
"path": "advanced/src/main/aidl/me/shouheng/advanced/aidl/Note.aidl",
"chars": 52,
"preview": "package me.shouheng.advanced.aidl;\n\nparcelable Note;"
},
{
"path": "advanced/src/main/debug/AndroidManifest.xml",
"chars": 1283,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"me.shouheng.advanced\" >\n\n <applicat"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/Activity2.java",
"chars": 832,
"preview": "package me.shouheng.advanced;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.os.Bundle;\n\nim"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/MainActivity.java",
"chars": 6508,
"preview": "package me.shouheng.advanced;\n\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.cont"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/ModuleAdvancedApp.java",
"chars": 549,
"preview": "package me.shouheng.advanced;\n\nimport com.alibaba.android.arouter.launcher.ARouter;\n\nimport me.shouheng.commons.BaseAppl"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/aidl/Note.java",
"chars": 1149,
"preview": "package me.shouheng.advanced.aidl;\n\nimport android.os.Parcel;\nimport android.os.Parcelable;\n\n/**\n * @author shouh\n * @ve"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/aidl/NoteService.java",
"chars": 2640,
"preview": "package me.shouheng.advanced.aidl;\n\nimport android.app.Notification;\nimport android.app.PendingIntent;\nimport android.ap"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/callback/ActResultRequest.java",
"chars": 1829,
"preview": "package me.shouheng.advanced.callback;\n\nimport android.content.Intent;\n\nimport androidx.appcompat.app.AppCompatActivity;"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/callback/OnActResultEventDispatcherFragment.java",
"chars": 1441,
"preview": "package me.shouheng.advanced.callback;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.util.Spa"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/keepalive/LongLiveService.java",
"chars": 2668,
"preview": "package me.shouheng.advanced.keepalive;\n\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/messenger/MessengerService.java",
"chars": 2119,
"preview": "package me.shouheng.advanced.messenger;\n\nimport android.app.Service;\nimport android.content.Intent;\nimport android.os.Bu"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/remote/Remote2Activity.java",
"chars": 872,
"preview": "package me.shouheng.advanced.remote;\n\nimport android.os.Bundle;\n\nimport com.alibaba.android.arouter.facade.annotation.Ro"
},
{
"path": "advanced/src/main/java/me/shouheng/advanced/remote/RemoteActivity.java",
"chars": 868,
"preview": "package me.shouheng.advanced.remote;\n\nimport android.os.Bundle;\n\nimport com.alibaba.android.arouter.facade.annotation.Ro"
},
{
"path": "advanced/src/main/res/layout/activity_2.xml",
"chars": 780,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <LinearL"
},
{
"path": "advanced/src/main/res/layout/activity_advanced.xml",
"chars": 2018,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <Linear"
},
{
"path": "advanced/src/main/res/layout/activity_remote.xml",
"chars": 557,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <LinearL"
},
{
"path": "advanced/src/main/res/values/strings.xml",
"chars": 71,
"preview": "<resources>\n <string name=\"app_name\">Advanced</string>\n</resources>\n"
},
{
"path": "advanced/src/main/res/values/styles.xml",
"chars": 285,
"preview": "<resources>\n\n <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n <item name=\"colorPrimary\">"
},
{
"path": "advanced/src/test/java/me/shouheng/advanced/ExampleUnitTest.java",
"chars": 381,
"preview": "package me.shouheng.advanced;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test"
},
{
"path": "animations/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "animations/build.gradle",
"chars": 2078,
"preview": "println isAnimationsModuleApp.toBoolean()\n\nif (isAnimationsModuleApp.toBoolean()) {\n apply plugin: 'com.android.appli"
},
{
"path": "animations/proguard-rules.pro",
"chars": 751,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "animations/src/androidTest/java/me/shouheng/animations/ExampleInstrumentedTest.java",
"chars": 714,
"preview": "package me.shouheng.animations;\n\nimport android.content.Context;\nimport androidx.test.InstrumentationRegistry;\nimport an"
},
{
"path": "animations/src/main/AndroidManifest.xml",
"chars": 573,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"me.shouheng.animations\">\n\n <applica"
},
{
"path": "animations/src/main/debug/AndroidManifest.xml",
"chars": 876,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "animations/src/main/java/me/shouheng/animations/DrawableActivity.java",
"chars": 656,
"preview": "package me.shouheng.animations;\n\nimport android.os.Bundle;\n\nimport com.alibaba.android.arouter.facade.annotation.Route;\n"
},
{
"path": "animations/src/main/java/me/shouheng/animations/MainActivity.java",
"chars": 4147,
"preview": "package me.shouheng.animations;\n\nimport android.graphics.Color;\nimport android.graphics.Rect;\nimport android.os.Bundle;\n"
},
{
"path": "animations/src/main/java/me/shouheng/animations/ModuleAnimationsApp.java",
"chars": 557,
"preview": "package me.shouheng.animations;\n\nimport com.alibaba.android.arouter.launcher.ARouter;\n\nimport me.shouheng.commons.BaseAp"
},
{
"path": "animations/src/main/java/me/shouheng/animations/reveal/CircleRevealActivity.java",
"chars": 1613,
"preview": "package me.shouheng.animations.reveal;\n\nimport android.animation.Animator;\nimport android.os.Bundle;\nimport android.view"
},
{
"path": "animations/src/main/res/drawable/drawable_bitmap.xml",
"chars": 183,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bitmap android:src=\"@drawable/ic_launcher\"\n android:filter=\"true\"\n xmlns:a"
},
{
"path": "animations/src/main/res/drawable/drawable_bitmap_no_filter.xml",
"chars": 187,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bitmap android:src=\"@drawable/ic_launcher\"\n android:tileMode=\"mirror\"\n xml"
},
{
"path": "animations/src/main/res/drawable/drawable_layer.xml",
"chars": 127,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n\n</laye"
},
{
"path": "animations/src/main/res/drawable/ic_launcher_background.xml",
"chars": 5606,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:wi"
},
{
"path": "animations/src/main/res/drawable-v24/ic_launcher_foreground.xml",
"chars": 1880,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:aapt=\"http://schemas.android.com/aapt\"\n "
},
{
"path": "animations/src/main/res/layout/activity_anim.xml",
"chars": 1972,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tool"
},
{
"path": "animations/src/main/res/layout/activity_circle_reveal.xml",
"chars": 2029,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:app="
},
{
"path": "animations/src/main/res/layout/activity_drawable.xml",
"chars": 2198,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <android"
},
{
"path": "animations/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "animations/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "animations/src/main/res/values/strings.xml",
"chars": 73,
"preview": "<resources>\n <string name=\"app_name\">animations</string>\n</resources>\n"
},
{
"path": "animations/src/main/res/values/styles.xml",
"chars": 285,
"preview": "<resources>\n\n <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n <item name=\"colorPrimary\">"
},
{
"path": "animations/src/test/java/me/shouheng/animations/ExampleUnitTest.java",
"chars": 383,
"preview": "package me.shouheng.animations;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit te"
},
{
"path": "client/.gitignore",
"chars": 850,
"preview": "# Built application files\n*.apk\n*.ap_\n\n# Files for the ART/Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated file"
},
{
"path": "client/app/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "client/app/build.gradle",
"chars": 5520,
"preview": "apply plugin: 'com.android.application'\napply plugin: 'io.fabric'\napply plugin: 'walle'\napply plugin: 'AndResGuard'\nappl"
},
{
"path": "client/app/channel",
"chars": 212,
"preview": "meituan # 美团\nsamsungapps #三星\nhiapk\nanzhi\nxiaomi # 小米\n91com\ngfan\nappchina\nnduoa\n3gcn\nmumayi\n10086com\nwostore\n189store\nlen"
},
{
"path": "client/app/fabric.properties",
"chars": 224,
"preview": "#Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public.\n#"
},
{
"path": "client/app/gradle/wrapper/gradle-wrapper.properties",
"chars": 230,
"preview": "#Wed Jun 06 19:41:09 CST 2018\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "client/app/gradlew",
"chars": 5296,
"preview": "#!/usr/bin/env sh\n\n##############################################################################\n##\n## Gradle start up"
},
{
"path": "client/app/gradlew.bat",
"chars": 2176,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "client/app/proguard-rules.pro",
"chars": 4563,
"preview": "#指定压缩级别\n-optimizationpasses 5\n#不跳过非公共的库的类成员\n-dontskipnonpubliclibraryclassmembers\n-dontskipnonpubliclibraryclasses\n#混淆时采"
},
{
"path": "client/app/src/androidTest/java/me/shouheng/references/ExampleInstrumentedTest.java",
"chars": 714,
"preview": "package me.shouheng.references;\n\nimport android.content.Context;\nimport androidx.test.InstrumentationRegistry;\nimport an"
},
{
"path": "client/app/src/main/AndroidManifest.xml",
"chars": 2278,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "client/app/src/main/assets/guokr.articleInline.js",
"chars": 2686,
"preview": "(function(){define(\"ga\",{setGa:function(){(function(e,t,n,r,i,s,o){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i]"
},
{
"path": "client/app/src/main/assets/guokr.base.js",
"chars": 101017,
"preview": "!function(a,b){function c(a){var b=a.length,c=fa.type(a);return fa.isWindow(a)?!1:1===a.nodeType&&b?!0:\"array\"===c||\"fun"
},
{
"path": "client/app/src/main/assets/guokr_master.css",
"chars": 8432,
"preview": "html{display:block}head{display:none}title{display:none}style{display:none}body{display:block}article,aside,footer,heade"
},
{
"path": "client/app/src/main/java/me/shouheng/references/MyApplication.java",
"chars": 1435,
"preview": "package me.shouheng.references;\n\nimport com.alibaba.android.arouter.launcher.ARouter;\nimport com.meituan.android.walle.W"
},
{
"path": "client/app/src/main/java/me/shouheng/references/view/intro/AppIntroActivity.java",
"chars": 815,
"preview": "package me.shouheng.references.view.intro;\n\nimport android.os.Bundle;\n\nimport com.alibaba.android.arouter.facade.annotat"
},
{
"path": "client/app/src/main/java/me/shouheng/references/view/intro/IntroFragment.java",
"chars": 1132,
"preview": "package me.shouheng.references.view.intro;\n\nimport android.os.Bundle;\n\nimport androidx.annotation.Nullable;\nimport andro"
},
{
"path": "client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide1.java",
"chars": 554,
"preview": "package me.shouheng.references.view.intro;\n\nimport android.os.Bundle;\n\nimport me.shouheng.references.R;\n\n\n/**\n * Created"
},
{
"path": "client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide2.java",
"chars": 465,
"preview": "package me.shouheng.references.view.intro;\n\nimport android.os.Bundle;\n\nimport me.shouheng.references.R;\n\n\npublic class I"
},
{
"path": "client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide3.java",
"chars": 465,
"preview": "package me.shouheng.references.view.intro;\n\nimport android.os.Bundle;\n\nimport me.shouheng.references.R;\n\n\npublic class I"
},
{
"path": "client/app/src/main/java/me/shouheng/references/view/intro/IntroSlide4.java",
"chars": 465,
"preview": "package me.shouheng.references.view.intro;\n\nimport android.os.Bundle;\n\nimport me.shouheng.references.R;\n\n\npublic class I"
},
{
"path": "client/app/src/main/java/me/shouheng/references/view/main/MainActivity.java",
"chars": 16116,
"preview": "package me.shouheng.references.view.main;\n\nimport android.app.PendingIntent;\nimport android.content.Context;\nimport andr"
},
{
"path": "client/app/src/main/java/me/shouheng/references/viewmodel/MainViewModel.java",
"chars": 392,
"preview": "package me.shouheng.references.viewmodel;\n\nimport android.app.Application;\nimport androidx.lifecycle.AndroidViewModel;\ni"
},
{
"path": "client/app/src/main/res/layout/activity_main.xml",
"chars": 2208,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tool"
},
{
"path": "client/app/src/main/res/layout/fragment_intro_slide.xml",
"chars": 2378,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "client/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "client/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "client/app/src/main/res/values/colors.xml",
"chars": 744,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"colorPrimary\">#FAFAFA</color>\n <color name=\"color"
},
{
"path": "client/app/src/main/res/values/dimens.xml",
"chars": 265,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <dimen name=\"intro_top_padding\">32dp</dimen>\n <dimen name=\"int"
},
{
"path": "client/app/src/main/res/values/strings.xml",
"chars": 251,
"preview": "<resources>\n <string name=\"app_name\">安卓开发参考</string>\n\n <string name=\"settings_short_name\">short name</string>\n "
},
{
"path": "client/app/src/main/res/values/styles.xml",
"chars": 746,
"preview": "<resources>\n\n <style name=\"AppTheme\" parent=\"Theme.MaterialComponents.Light.NoActionBar.Bridge\">\n <!-- Customi"
},
{
"path": "client/app/src/main/res/xml/provider_paths.xml",
"chars": 166,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<paths xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <external-"
},
{
"path": "client/app/src/main/res/xml/shortcuts.xml",
"chars": 1426,
"preview": "<shortcuts xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <shortcut android:shortcutId=\"intro\"\n "
},
{
"path": "client/app/src/test/java/me/shouheng/references/ExampleUnitTest.java",
"chars": 383,
"preview": "package me.shouheng.references;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit te"
},
{
"path": "client/build.gradle",
"chars": 1636,
"preview": "buildscript {\n repositories {\n google()\n jcenter()\n maven { url 'https://maven.fabric.io/public'"
},
{
"path": "client/gradle/wrapper/gradle-wrapper.properties",
"chars": 230,
"preview": "#Tue Oct 30 20:12:17 CST 2018\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "client/gradle.properties",
"chars": 479,
"preview": "org.gradle.daemon=true\norg.gradle.configureondemond=true\norg.gradle.jvmargs=-Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -D"
},
{
"path": "client/gradlew",
"chars": 5296,
"preview": "#!/usr/bin/env sh\n\n##############################################################################\n##\n## Gradle start up"
},
{
"path": "client/gradlew.bat",
"chars": 2176,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "client/settings.gradle",
"chars": 826,
"preview": "include ':app', ':commons', ':guokr', ':live', ':layout', ':libraries', ':eyepetizer', ':knife-annotation', ':knife-api"
},
{
"path": "commons/.gitignore",
"chars": 850,
"preview": "# Built application files\n*.apk\n*.ap_\n\n# Files for the ART/Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated file"
},
{
"path": "commons/build.gradle",
"chars": 4177,
"preview": "apply plugin: 'com.android.library'\n\nandroid {\n compileSdkVersion rootProject.ext.compileSdkVersion\n defaultConfig"
},
{
"path": "commons/proguard-rules.pro",
"chars": 0,
"preview": ""
},
{
"path": "commons/src/androidTest/java/me/shouheng/commons/ExampleInstrumentedTest.java",
"chars": 713,
"preview": "package me.shouheng.commons;\n\nimport android.content.Context;\nimport androidx.test.InstrumentationRegistry;\nimport andro"
},
{
"path": "commons/src/main/AndroidManifest.xml",
"chars": 196,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"me.shouheng.commons\" >\n <uses-permi"
},
{
"path": "commons/src/main/java/me/shouheng/commons/BaseApplication.java",
"chars": 1115,
"preview": "package me.shouheng.commons;\n\nimport android.app.Application;\nimport androidx.multidex.MultiDex;\n\nimport com.alibaba.and"
},
{
"path": "commons/src/main/java/me/shouheng/commons/config/BaseConstants.java",
"chars": 4435,
"preview": "package me.shouheng.commons.config;\n\n/**\n * Created by WngShhng on 2018/6/7.*/\npublic interface BaseConstants {\n\n // "
},
{
"path": "commons/src/main/java/me/shouheng/commons/config/Configs.java",
"chars": 227,
"preview": "package me.shouheng.commons.config;\n\n/**\n * Created by WngShhng on 2018/8/2.*/\npublic interface Configs {\n String APP"
},
{
"path": "commons/src/main/java/me/shouheng/commons/di/AppComponent.java",
"chars": 729,
"preview": "package me.shouheng.commons.di;\n\nimport android.app.Application;\n\nimport javax.inject.Singleton;\n\nimport dagger.BindsIns"
},
{
"path": "commons/src/main/java/me/shouheng/commons/di/enums/ActivityScoped.java",
"chars": 375,
"preview": "package me.shouheng.commons.di.enums;\n\nimport java.lang.annotation.Documented;\nimport java.lang.annotation.Retention;\nim"
},
{
"path": "commons/src/main/java/me/shouheng/commons/di/enums/ViewModelKey.java",
"chars": 505,
"preview": "package me.shouheng.commons.di.enums;\n\nimport androidx.lifecycle.ViewModel;\n\nimport java.lang.annotation.Documented;\nimp"
},
{
"path": "commons/src/main/java/me/shouheng/commons/di/module/AppModule.java",
"chars": 609,
"preview": "package me.shouheng.commons.di.module;\n\nimport java.util.concurrent.TimeUnit;\n\nimport javax.inject.Singleton;\n\nimport da"
},
{
"path": "commons/src/main/java/me/shouheng/commons/model/Resource.java",
"chars": 1353,
"preview": "package me.shouheng.commons.model;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport sta"
},
{
"path": "commons/src/main/java/me/shouheng/commons/model/Status.java",
"chars": 146,
"preview": "package me.shouheng.commons.model;\n\n/**\n * Created by wang shouheng on 2018/3/13. */\npublic enum Status {\n SUCCESS,\n"
},
{
"path": "commons/src/main/java/me/shouheng/commons/rxbus/RxBus.java",
"chars": 2313,
"preview": "package me.shouheng.commons.rxbus;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport io.reactivex.BackpressureStr"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/ColorUtils.java",
"chars": 1993,
"preview": "package me.shouheng.commons.tools;\n\nimport android.content.res.ColorStateList;\nimport android.graphics.Color;\nimport and"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/FragmentHelper.java",
"chars": 1978,
"preview": "package me.shouheng.commons.tools;\n\nimport androidx.annotation.IdRes;\nimport androidx.fragment.app.Fragment;\nimport andr"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/LogUtils.java",
"chars": 2930,
"preview": "package me.shouheng.commons.tools;\n\nimport android.util.Log;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport me.sh"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/NetworkUtils.java",
"chars": 964,
"preview": "package me.shouheng.commons.tools;\n\nimport android.content.Context;\nimport android.net.ConnectivityManager;\nimport andro"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/PalmUtils.java",
"chars": 2718,
"preview": "package me.shouheng.commons.tools;\n\nimport android.app.Activity;\nimport android.graphics.drawable.Drawable;\nimport andro"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/StringUtils.java",
"chars": 7118,
"preview": "package me.shouheng.commons.tools;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.StringRes;\nimport and"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/TimeUtils.java",
"chars": 16811,
"preview": "package me.shouheng.commons.tools;\n\nimport android.content.Context;\nimport android.text.format.DateUtils;\n\nimport org.jo"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/ToastUtils.java",
"chars": 795,
"preview": "package me.shouheng.commons.tools;\n\nimport androidx.annotation.StringRes;\nimport android.widget.Toast;\n\nimport me.shouhe"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/ViewUtils.java",
"chars": 3476,
"preview": "package me.shouheng.commons.tools;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content."
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/glide/MyAppGlideModule.java",
"chars": 2259,
"preview": "package me.shouheng.commons.tools.glide;\n\nimport android.content.Context;\n\nimport com.bumptech.glide.Glide;\nimport com.b"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/permission/OnGetPermissionCallback.java",
"chars": 162,
"preview": "package me.shouheng.commons.tools.permission;\n\n/**\n * Created by WngShhng on 2018/6/7.*/\npublic interface OnGetPermissio"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/permission/PermissionUtils.java",
"chars": 4940,
"preview": "package me.shouheng.commons.tools.permission;\n\nimport android.Manifest;\nimport android.annotation.TargetApi;\nimport andr"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/theme/SystemUiVisibilityUtil.java",
"chars": 2006,
"preview": "package me.shouheng.commons.tools.theme;\n\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport andro"
},
{
"path": "commons/src/main/java/me/shouheng/commons/tools/theme/ThemeUtils.java",
"chars": 2428,
"preview": "package me.shouheng.commons.tools.theme;\n\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport andro"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/activity/BaseActivity.java",
"chars": 3871,
"preview": "package me.shouheng.commons.view.activity;\n\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimp"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/activity/CommonActivity.java",
"chars": 2955,
"preview": "package me.shouheng.commons.view.activity;\n\nimport android.app.Activity;\nimport androidx.lifecycle.ViewModel;\nimport and"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/activity/CommonDaggerActivity.java",
"chars": 474,
"preview": "package me.shouheng.commons.view.activity;\n\nimport androidx.databinding.ViewDataBinding;\nimport android.os.Bundle;\n\nimpo"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/activity/UMengActivity.java",
"chars": 451,
"preview": "package me.shouheng.commons.view.activity;\n\nimport android.os.Bundle;\n\nimport com.umeng.message.PushAgent;\n\n/**\n * @auth"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/fragment/CommonDaggerFragment.java",
"chars": 939,
"preview": "package me.shouheng.commons.view.fragment;\n\nimport androidx.lifecycle.LifecycleRegistry;\nimport androidx.lifecycle.Lifec"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/fragment/CommonFragment.java",
"chars": 2864,
"preview": "package me.shouheng.commons.view.fragment;\n\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport and"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/widget/CircleImageView.java",
"chars": 9063,
"preview": "package me.shouheng.commons.view.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport "
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/widget/DividerItemDecoration.java",
"chars": 3505,
"preview": "package me.shouheng.commons.view.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport "
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/widget/DragSortRecycler.java",
"chars": 13591,
"preview": "package me.shouheng.commons.view.widget;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/widget/EmptyView.java",
"chars": 3697,
"preview": "package me.shouheng.commons.view.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport "
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/widget/SpaceItemDecoration.java",
"chars": 825,
"preview": "package me.shouheng.commons.view.widget;\n\nimport android.graphics.Rect;\nimport androidx.recyclerview.widget.RecyclerView"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/widget/SquareFrameLayout.java",
"chars": 1023,
"preview": "package me.shouheng.commons.view.widget;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport andro"
},
{
"path": "commons/src/main/java/me/shouheng/commons/view/widget/SquareImageView.java",
"chars": 759,
"preview": "package me.shouheng.commons.view.widget;\n\nimport android.content.Context;\nimport androidx.appcompat.widget.AppCompatImag"
},
{
"path": "commons/src/main/res/drawable/bg_toolbar_shade.xml",
"chars": 269,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android"
},
{
"path": "commons/src/main/res/drawable/ic_account_circle_black_24dp.xml",
"chars": 540,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "commons/src/main/res/drawable/ic_add_black_24dp.xml",
"chars": 325,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "commons/src/main/res/drawable/ic_autorenew_black_24dp.xml",
"chars": 557,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "commons/src/main/res/drawable/ic_check_circle_black_24dp.xml",
"chars": 412,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "commons/src/main/res/drawable/ic_close_black_24dp.xml",
"chars": 391,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "commons/src/main/res/drawable/ic_favorite_black_24dp.xml",
"chars": 469,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "commons/src/main/res/drawable/ic_launcher_background.xml",
"chars": 5606,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:wi"
},
{
"path": "commons/src/main/res/drawable/ic_launcher_foreground.xml",
"chars": 1880,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:aapt=\"http://schemas.android.com/aapt\"\n "
},
{
"path": "commons/src/main/res/drawable/ic_widgets_black_24dp.xml",
"chars": 395,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "commons/src/main/res/drawable/item_divider_black.xml",
"chars": 218,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:sha"
},
{
"path": "commons/src/main/res/drawable/item_divider_white.xml",
"chars": 218,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:sha"
},
{
"path": "commons/src/main/res/drawable/nav_item_color.xml",
"chars": 274,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item a"
},
{
"path": "commons/src/main/res/layout/layout_toolbar.xml",
"chars": 747,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <LinearL"
},
{
"path": "commons/src/main/res/layout/widget_empty_view.xml",
"chars": 1691,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tool"
},
{
"path": "commons/src/main/res/values/attrs.xml",
"chars": 699,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <declare-styleable name=\"CircleImageView\">\n <attr name=\"bo"
},
{
"path": "commons/src/main/res/values/colors.xml",
"chars": 1535,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"colorPrimary\">#FAFAFA</color>\n <color name=\"color"
},
{
"path": "commons/src/main/res/values/dimens.xml",
"chars": 154,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <dimen name=\"empty_view_size\">120dp</dimen>\n\n <dimen name=\"fab"
},
{
"path": "commons/src/main/res/values/strings.xml",
"chars": 6239,
"preview": "<resources>\n\n <string name=\"app_name\">安卓开发参考</string>\n\n <string name=\"menu_item_title_0\">主界面</string>\n <string "
},
{
"path": "commons/src/main/res/values/styles.xml",
"chars": 232,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <style name=\"AppTheme.AppBarOverlay\" parent=\"@style/ThemeOverlay."
},
{
"path": "commons/src/main/res/xml/network_security_config.xml",
"chars": 422,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<network-security-config>\n <domain-config cleartextTrafficPermitted=\"true\">\n "
},
{
"path": "commons/src/test/java/me/shouheng/commons/ExampleUnitTest.java",
"chars": 380,
"preview": "package me.shouheng.commons;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test,"
},
{
"path": "eyepetizer/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "eyepetizer/build.gradle",
"chars": 1795,
"preview": "println isEyepetizerModuleApp.toBoolean()\n\nif (isEyepetizerModuleApp.toBoolean()) {\n apply plugin: 'com.android.appli"
},
{
"path": "eyepetizer/proguard-rules.pro",
"chars": 751,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "eyepetizer/src/androidTest/java/me/shouheng/eyepetizer/ExampleInstrumentedTest.java",
"chars": 714,
"preview": "package me.shouheng.eyepetizer;\n\nimport android.content.Context;\nimport androidx.test.InstrumentationRegistry;\nimport an"
},
{
"path": "eyepetizer/src/main/AndroidManifest.xml",
"chars": 641,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "eyepetizer/src/main/debug/AndroidManifest.xml",
"chars": 1263,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"me.shouheng.eyepetizer\">\n\n <uses-pe"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/ModuleEyepetizerApp.java",
"chars": 557,
"preview": "package me.shouheng.eyepetizer;\n\nimport com.alibaba.android.arouter.launcher.ARouter;\n\nimport me.shouheng.commons.BaseAp"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/base/BasePresenter.java",
"chars": 167,
"preview": "package me.shouheng.eyepetizer.mvp.base;\n\n/**\n * @author shouh\n * @version $Id: BasePresenter, v 0.1 2018/8/19 17:14 sho"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/base/BaseView.java",
"chars": 157,
"preview": "package me.shouheng.eyepetizer.mvp.base;\n\n/**\n * @author shouh\n * @version $Id: BaseView, v 0.1 2018/8/19 17:13 shouh Ex"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/contract/HomeContract.java",
"chars": 696,
"preview": "package me.shouheng.eyepetizer.mvp.contract;\n\nimport java.util.List;\n\nimport me.shouheng.eyepetizer.mvp.base.BasePresent"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/model/HomeModel.java",
"chars": 588,
"preview": "package me.shouheng.eyepetizer.mvp.model;\n\nimport io.reactivex.Observable;\nimport me.shouheng.eyepetizer.mvp.model.bean."
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/model/bean/HomeBean.java",
"chars": 98839,
"preview": "package me.shouheng.eyepetizer.mvp.model.bean;\n\nimport java.util.List;\n\n/**\n * @author shouh\n * @version $Id: HomeBean, "
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/mvp/presenter/HomePresenter.java",
"chars": 3404,
"preview": "package me.shouheng.eyepetizer.mvp.presenter;\n\nimport java.util.LinkedList;\nimport java.util.List;\n\nimport io.reactivex."
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/net/APIRetrofit.java",
"chars": 1045,
"preview": "package me.shouheng.eyepetizer.net;\n\nimport java.util.concurrent.TimeUnit;\n\nimport okhttp3.OkHttpClient;\nimport retrofit"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/net/APIService.java",
"chars": 493,
"preview": "package me.shouheng.eyepetizer.net;\n\nimport io.reactivex.Observable;\nimport me.shouheng.eyepetizer.mvp.model.bean.HomeBe"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/activity/ContainerActivity.java",
"chars": 1350,
"preview": "package me.shouheng.eyepetizer.ui.activity;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport androidx.fr"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/activity/HomeActivity.java",
"chars": 4306,
"preview": "package me.shouheng.eyepetizer.ui.activity;\n\nimport android.os.Bundle;\nimport androidx.appcompat.app.ActionBar;\nimport a"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/adapter/HomeAdapter.java",
"chars": 1652,
"preview": "package me.shouheng.eyepetizer.ui.adapter;\n\nimport android.content.Context;\nimport android.widget.ImageView;\n\nimport com"
},
{
"path": "eyepetizer/src/main/java/me/shouheng/eyepetizer/ui/fragment/VideoFragment.java",
"chars": 3825,
"preview": "package me.shouheng.eyepetizer.ui.fragment;\n\nimport android.os.Bundle;\nimport android.view.View;\n\nimport com.alibaba.and"
},
{
"path": "eyepetizer/src/main/res/drawable/ic_launcher_background.xml",
"chars": 5606,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:wi"
},
{
"path": "eyepetizer/src/main/res/drawable-v24/ic_launcher_foreground.xml",
"chars": 1880,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:aapt=\"http://schemas.android.com/aapt\"\n "
},
{
"path": "eyepetizer/src/main/res/layout/activity_container.xml",
"chars": 373,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tool"
},
{
"path": "eyepetizer/src/main/res/layout/activity_eyepetizer_menu.xml",
"chars": 907,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tool"
},
{
"path": "eyepetizer/src/main/res/layout/fragment_eye_video.xml",
"chars": 525,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <Linear"
},
{
"path": "eyepetizer/src/main/res/layout/item_home.xml",
"chars": 2361,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.cardview.widget.CardView xmlns:android=\"http://schemas.android.com/apk/"
},
{
"path": "eyepetizer/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "eyepetizer/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "eyepetizer/src/main/res/values/strings.xml",
"chars": 73,
"preview": "<resources>\n <string name=\"app_name\">eyepetizer</string>\n</resources>\n"
},
{
"path": "eyepetizer/src/main/res/values/styles.xml",
"chars": 302,
"preview": "<resources>\n\n <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n <item name=\"colorPrimary\">"
},
{
"path": "eyepetizer/src/test/java/me/shouheng/eyepetizer/ExampleUnitTest.java",
"chars": 383,
"preview": "package me.shouheng.eyepetizer;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit te"
},
{
"path": "guokr/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "guokr/build.gradle",
"chars": 1783,
"preview": "println isGuokrModuleApp.toBoolean()\n\nif (isGuokrModuleApp.toBoolean()) {\n apply plugin: 'com.android.application'\n} "
},
{
"path": "guokr/proguard-rules.pro",
"chars": 751,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "guokr/src/androidTest/java/me/shouheng/guokr/ExampleInstrumentedTest.java",
"chars": 704,
"preview": "package me.shouheng.guokr;\n\nimport android.content.Context;\nimport androidx.test.InstrumentationRegistry;\nimport android"
},
{
"path": "guokr/src/main/AndroidManifest.xml",
"chars": 463,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"me.shouheng.guokr\">\n\n <application\n"
},
{
"path": "guokr/src/main/debug/AndroidManifest.xml",
"chars": 1250,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"me.shouheng.guokr\">\n\n <uses-permiss"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/ModuleGuokrApp.java",
"chars": 537,
"preview": "package me.shouheng.guokr;\n\nimport com.alibaba.android.arouter.launcher.ARouter;\n\nimport me.shouheng.commons.BaseApplica"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/model/data/GuokrNews.java",
"chars": 71424,
"preview": "package me.shouheng.guokr.model.data;\n\nimport java.util.List;\n\n/**\n * @author shouh\n * @version $Id: GuokrNews, v 0.1 20"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/model/data/GuokrNewsContent.java",
"chars": 37686,
"preview": "package me.shouheng.guokr.model.data;\n\nimport java.util.List;\n\n/**\n * @author shouh\n * @version $Id: GuokrNewsContent, v"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/model/repository/GuokrRetrofit.java",
"chars": 1008,
"preview": "package me.shouheng.guokr.model.repository;\n\nimport java.util.concurrent.TimeUnit;\n\nimport okhttp3.OkHttpClient;\nimport "
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/model/repository/GuokrService.java",
"chars": 630,
"preview": "package me.shouheng.guokr.model.repository;\n\nimport io.reactivex.Observable;\nimport me.shouheng.guokr.model.data.GuokrNe"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/view/GuokrNewsActivity.java",
"chars": 2671,
"preview": "package me.shouheng.guokr.view;\n\nimport android.os.Bundle;\nimport androidx.fragment.app.Fragment;\nimport androidx.appcom"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/view/adapter/GuokrNewsAdapter.java",
"chars": 1691,
"preview": "package me.shouheng.guokr.view.adapter;\n\nimport android.content.Context;\nimport android.widget.ImageView;\n\nimport com.ch"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/view/fragment/NewsDetailFragment.java",
"chars": 4635,
"preview": "package me.shouheng.guokr.view.fragment;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport an"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/view/fragment/NewsListFragment.java",
"chars": 3548,
"preview": "package me.shouheng.guokr.view.fragment;\n\nimport android.app.Activity;\nimport androidx.lifecycle.ViewModelProviders;\nimp"
},
{
"path": "guokr/src/main/java/me/shouheng/guokr/viewmodel/GuokrViewModel.java",
"chars": 3341,
"preview": "package me.shouheng.guokr.viewmodel;\n\nimport androidx.lifecycle.LiveData;\nimport androidx.lifecycle.MutableLiveData;\nimp"
}
]
// ... and 211 more files (download for full content)
About this extraction
This page contains the full source code of the Shouheng88/Android-references GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 411 files (1.0 MB), approximately 298.9k tokens, and a symbol index with 2035 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.