├── CONTRIBUTING.md ├── DemoAnnotation ├── .gitignore ├── README.md ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── demo │ │ │ └── annotation │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── demo │ │ │ │ └── annotation │ │ │ │ ├── MainActivity.java │ │ │ │ └── model │ │ │ │ ├── BaseStudent.java │ │ │ │ ├── David.java │ │ │ │ ├── Harry.java │ │ │ │ ├── Jason.java │ │ │ │ └── Norris.java │ │ └── res │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values-night │ │ │ └── themes.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── ttdevs │ │ └── demo │ │ └── annotation │ │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── images │ ├── Debug_01_Configuration.png │ ├── Debug_02_Add_Configuration.png │ ├── Debug_03_Edit_Gradle_Properties.png │ └── Debug_04_Add_Breakpoints_Debug.png ├── lib_annotation │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── ttdevs │ │ └── demo │ │ └── lib │ │ └── annotation │ │ ├── Student.java │ │ └── Teacher.java ├── lib_compiler │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ ├── META-INF │ │ └── services │ │ │ └── javax.annotation.processing.Processor │ │ └── com │ │ └── ttdevs │ │ └── demo │ │ └── lib │ │ └── compiler │ │ ├── StudentProcessor.java │ │ └── utils │ │ ├── ClassUtils.java │ │ ├── LogUtils.java │ │ └── StudentManagerBuilder.java └── settings.gradle ├── DemoIPC ├── .gitignore ├── README.md ├── app_client │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── ipc │ │ │ └── client │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── ipc │ │ │ │ └── client │ │ │ │ └── MainActivity.java │ │ └── res │ │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── ttdevs │ │ └── ipc │ │ └── client │ │ └── ExampleUnitTest.java ├── app_server │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── ipc │ │ │ └── server │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── ipc │ │ │ │ └── server │ │ │ │ ├── MainActivity.java │ │ │ │ └── StudentService.java │ │ └── res │ │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── ttdevs │ │ └── ipc │ │ └── server │ │ └── ExampleUnitTest.java ├── build.gradle ├── doc │ ├── AIDL.asta │ ├── AIDL_上.md │ ├── AIDL_下..md │ ├── AIDL_中.md │ ├── IStudentListener.java │ └── IStudentManager.java ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── ipc │ ├── .gitignore │ ├── build.gradle │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── ipc │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── aidl │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── ipc │ │ │ │ ├── IStudentListener.aidl │ │ │ │ ├── IStudentManager.aidl │ │ │ │ └── Student.aidl │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── ipc │ │ │ ├── Student.java │ │ │ └── utils │ │ │ └── LogUtils.java │ │ └── test │ │ └── java │ │ └── com │ │ └── ttdevs │ │ └── ipc │ │ └── ExampleUnitTest.java └── settings.gradle ├── DemoOld ├── .gitignore ├── LICENSE ├── README.md ├── android.jks ├── app │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── android │ │ │ └── ApplicationTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ └── README.md │ │ ├── java │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── android │ │ │ │ ├── AboutActivity.java │ │ │ │ ├── AndroidApplication.java │ │ │ │ ├── ArgbEvaluatorActivity.java │ │ │ │ ├── BackupActivity.java │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── ConcealActivity.java │ │ │ │ ├── CustomViewActivity.java │ │ │ │ ├── EndLessActivity.java │ │ │ │ ├── HybridViewActivity.java │ │ │ │ ├── IndicatorViewActivity.java │ │ │ │ ├── JNIActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MarkdownActivity.java │ │ │ │ ├── PlayerActivity.java │ │ │ │ ├── ReactiveActivity.java │ │ │ │ ├── RouterActivity.java │ │ │ │ ├── SocketActivity.java │ │ │ │ ├── SpannableActivity.java │ │ │ │ ├── SweepGradientActivity.java │ │ │ │ ├── TabLayoutActivity.java │ │ │ │ ├── TempActivity.java │ │ │ │ ├── TransformerActivity.java │ │ │ │ ├── UCropActivity.java │ │ │ │ ├── ViewFlipperActivity.java │ │ │ │ ├── WebSocketActivity.java │ │ │ │ ├── WebSocketOKActivity.java │ │ │ │ ├── calendar │ │ │ │ ├── CalendarActivity.java │ │ │ │ ├── CommaMonthView.java │ │ │ │ ├── CommaWeekView.java │ │ │ │ └── IndexMonthView.java │ │ │ │ ├── conceal │ │ │ │ ├── ConcealDBHelper.java │ │ │ │ ├── ConcealUtil.java │ │ │ │ └── README.md │ │ │ │ ├── endless │ │ │ │ ├── EndlessAdapter.java │ │ │ │ ├── LinearLayoutFragment.java │ │ │ │ ├── OnRecyclerLoadMoreListener.java │ │ │ │ └── README.md │ │ │ │ ├── tablayout │ │ │ │ ├── README.md │ │ │ │ └── TabFragment.java │ │ │ │ ├── transformers │ │ │ │ ├── CoverModeTransformer.java │ │ │ │ ├── CustomViewPager.java │ │ │ │ ├── DepthPageTransformer.java │ │ │ │ ├── MultiViewPager.java │ │ │ │ ├── MyPageTransform.java │ │ │ │ ├── RotatePageTransformer.java │ │ │ │ ├── ScaleYTransformer.java │ │ │ │ ├── ScreenSlidePageFragment.java │ │ │ │ ├── SelfTransformer.java │ │ │ │ └── ZoomOutPageTransformer.java │ │ │ │ ├── ucrop │ │ │ │ └── README.md │ │ │ │ ├── utils │ │ │ │ ├── FileUtils.java │ │ │ │ ├── LogUtils.java │ │ │ │ ├── SysUtils.java │ │ │ │ └── Utils.java │ │ │ │ └── view │ │ │ │ └── CircleProgress.java │ │ └── res │ │ │ ├── anim │ │ │ ├── bottom_in.xml │ │ │ └── bottom_out.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-xhdpi │ │ │ └── ic_demo.jpeg │ │ │ ├── drawable-xxhdpi │ │ │ ├── ic_next_year.png │ │ │ └── ic_prev_year.png │ │ │ ├── drawable │ │ │ └── side_nav_bar.xml │ │ │ ├── layout │ │ │ ├── activity_about.xml │ │ │ ├── activity_argb_evaluator.xml │ │ │ ├── activity_backup.xml │ │ │ ├── activity_base.xml │ │ │ ├── activity_calendar.xml │ │ │ ├── activity_cicle_view.xml │ │ │ ├── activity_conceal.xml │ │ │ ├── activity_custom_view.xml │ │ │ ├── activity_end_less.xml │ │ │ ├── activity_hybrid_view.xml │ │ │ ├── activity_jni.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_markdown.xml │ │ │ ├── activity_reactive.xml │ │ │ ├── activity_router.xml │ │ │ ├── activity_socket.xml │ │ │ ├── activity_spannable.xml │ │ │ ├── activity_sweep_gradient.xml │ │ │ ├── activity_tab_layout.xml │ │ │ ├── activity_temp.xml │ │ │ ├── activity_transformer.xml │ │ │ ├── activity_ucrop.xml │ │ │ ├── activity_video.xml │ │ │ ├── activity_view_fillper.xml │ │ │ ├── activity_web_socket.xml │ │ │ ├── activity_web_socket_ok.xml │ │ │ ├── app_bar_main.xml │ │ │ ├── content_main.xml │ │ │ ├── fragment_endless_linear.xml │ │ │ ├── item_transformer.xml │ │ │ ├── nav_header_main.xml │ │ │ └── subview_divider.xml │ │ │ ├── menu │ │ │ ├── activity_main_drawer.xml │ │ │ ├── main.xml │ │ │ └── menu_end_less.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-v21 │ │ │ └── styles.xml │ │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── drawables.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── ttdevs │ │ └── android │ │ ├── ArithmeticTest.java │ │ ├── ExampleUnitTest.java │ │ ├── JavaTest.java │ │ ├── NIOTest.java │ │ ├── OOMTest.java │ │ └── SecurityUtil.java ├── apps │ ├── air │ │ ├── .gitignore │ │ ├── README.md │ │ ├── ble.png │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── air │ │ │ │ └── ExampleInstrumentedTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── air │ │ │ │ │ ├── BaseActivity.java │ │ │ │ │ ├── BikeActivity.java │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── MainBLEActivity.java │ │ │ │ │ ├── MainNormalActivity.java │ │ │ │ │ ├── ScanActivity.java │ │ │ │ │ ├── service │ │ │ │ │ ├── BLEService.java │ │ │ │ │ └── BikeService.java │ │ │ │ │ └── utils │ │ │ │ │ ├── BLEHandler.java │ │ │ │ │ ├── BLEThread.java │ │ │ │ │ ├── BLEUtils.java │ │ │ │ │ ├── BaseWorkerThread.java │ │ │ │ │ ├── HexUtils.java │ │ │ │ │ └── ReceiveDataThread.java │ │ │ └── res │ │ │ │ ├── drawable │ │ │ │ └── side_nav_bar.xml │ │ │ │ ├── layout │ │ │ │ ├── activity_bike.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── activity_main_ble.xml │ │ │ │ ├── activity_main_normal.xml │ │ │ │ ├── activity_scan.xml │ │ │ │ ├── content_main.xml │ │ │ │ ├── content_scan.xml │ │ │ │ └── item_scan_device.xml │ │ │ │ ├── menu │ │ │ │ ├── activity_main_drawer.xml │ │ │ │ └── main.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── values-v21 │ │ │ │ └── styles.xml │ │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── drawables.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── air │ │ │ └── ExampleUnitTest.java │ └── dagger │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── dagger │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── dagger │ │ │ │ ├── A01SimpleComponent.java │ │ │ │ ├── A01SimpleModule.java │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ └── Student.java │ │ └── res │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── ttdevs │ │ └── dagger │ │ └── ExampleUnitTest.java ├── build.gradle ├── config.gradle ├── doc │ └── image │ │ ├── image-conceal-file.png │ │ ├── image-conceal-string.png │ │ ├── image-dir.png │ │ ├── image-javah.png │ │ └── image-ndkbuild.png ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── modules │ ├── annotations │ │ ├── .gitignore │ │ ├── build.gradle │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ ├── AnnoTest.java │ │ │ ├── CustomAnno.java │ │ │ ├── PersonModel.java │ │ │ └── TestProcessor.java │ ├── guava │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── guava │ │ │ │ └── ExampleInstrumentedTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── res │ │ │ │ └── values │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── guava │ │ │ ├── ExampleUnitTest.java │ │ │ └── ListTest.java │ ├── hybrid │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── hybrid │ │ │ │ └── ApplicationTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── hybrid │ │ │ │ │ ├── expand │ │ │ │ │ └── CouponItemView.java │ │ │ │ │ ├── nested │ │ │ │ │ ├── ChildView.java │ │ │ │ │ ├── ChildWebView.java │ │ │ │ │ └── HomeView.java │ │ │ │ │ └── scroller │ │ │ │ │ ├── ChildView.java │ │ │ │ │ ├── ChildWebView.java │ │ │ │ │ ├── HomeView.java │ │ │ │ │ └── IScrollStatus.java │ │ │ └── res │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── bg_coupon_body.9.png │ │ │ │ ├── bg_coupon_header.png │ │ │ │ ├── ic_arrows_down.png │ │ │ │ └── ic_arrows_up.png │ │ │ │ ├── drawable │ │ │ │ ├── ic_half_circle_left.png │ │ │ │ ├── ic_half_circle_right.png │ │ │ │ ├── selector_coupon_check.xml │ │ │ │ ├── shape_divide_gap_gray_horizontal.xml │ │ │ │ ├── shape_divide_gap_gray_vertical.xml │ │ │ │ └── shape_half_circle_left.xml │ │ │ │ ├── layout │ │ │ │ ├── item_view_coupon.xml │ │ │ │ └── item_view_coupon_1.xml │ │ │ │ └── values │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── hybrid │ │ │ └── ExampleUnitTest.java │ ├── indicator │ │ ├── .gitignore │ │ ├── README.md │ │ ├── boohee_design.png │ │ ├── build.gradle │ │ ├── indicator_line.png │ │ ├── indicator_progress.png │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── indicator │ │ │ │ └── ApplicationTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── indicator │ │ │ │ │ ├── BaseCircle.java │ │ │ │ │ ├── CircleIndicator.java │ │ │ │ │ ├── CircleProgress.java │ │ │ │ │ ├── IndicatorItem.java │ │ │ │ │ ├── LineIndicator.java │ │ │ │ │ └── ViewUtils.java │ │ │ └── res │ │ │ │ └── values │ │ │ │ ├── attrs.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── indicator │ │ │ └── ExampleUnitTest.java │ ├── jniutils │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── jniutils │ │ │ │ └── ApplicationTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── jniutils │ │ │ │ │ ├── CipherUtils.java │ │ │ │ │ └── demo │ │ │ │ │ └── JavaClass.java │ │ │ ├── jni │ │ │ │ ├── CipherConfig.cpp │ │ │ │ ├── CipherConfig.h │ │ │ │ ├── CipherUtils.cpp │ │ │ │ ├── CipherUtils.h │ │ │ │ ├── ios_base64 │ │ │ │ │ ├── NSDataMKBase64.cpp │ │ │ │ │ └── NSDataMKBase64.h │ │ │ │ └── utils │ │ │ │ │ ├── FrogSha1.cpp │ │ │ │ │ ├── FrogSha1.h │ │ │ │ │ └── log.h │ │ │ └── res │ │ │ │ └── values │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── jniutils │ │ │ └── ExampleUnitTest.java │ ├── markdown │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── markdown │ │ │ │ └── ApplicationTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ │ ├── bootstrap.css │ │ │ │ ├── highlight.min.js │ │ │ │ ├── markdown.html │ │ │ │ ├── remarkable.min.js │ │ │ │ └── solarized_light.min.css │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── markdown │ │ │ │ │ └── MarkDownView.java │ │ │ └── res │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_arrow_back_alpha.png │ │ │ │ └── ic_arrow_back_grey.png │ │ │ │ ├── layout │ │ │ │ └── view_markdown.xml │ │ │ │ └── values │ │ │ │ ├── attrs.xml │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── markdown │ │ │ └── ExampleUnitTest.java │ ├── reactive │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── reactive │ │ │ │ └── ApplicationTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── reactive │ │ │ │ │ ├── QiniuConfig.java │ │ │ │ │ ├── QiniuModel.java │ │ │ │ │ ├── QiniuUploader.java │ │ │ │ │ ├── UploadHandler.java │ │ │ │ │ └── utils │ │ │ │ │ ├── BitmapUtils.java │ │ │ │ │ └── LogUtils.java │ │ │ └── res │ │ │ │ └── values │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── reactive │ │ │ ├── ExampleUnitTest.java │ │ │ └── RxTest.java │ ├── retrofit │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── retrofit │ │ │ │ └── ApplicationTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── retrofit │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── RetrofitManager.java │ │ │ │ │ ├── client │ │ │ │ │ └── DefaultInterceptor.java │ │ │ │ │ ├── module │ │ │ │ │ ├── Error.java │ │ │ │ │ └── User.java │ │ │ │ │ └── service │ │ │ │ │ ├── ExampleService.java │ │ │ │ │ ├── GitHubService.java │ │ │ │ │ └── TuchongServices.java │ │ │ └── res │ │ │ │ ├── layout │ │ │ │ └── activity_main.xml │ │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ │ └── values │ │ │ │ ├── dimens.xml │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── retrofit │ │ │ └── RetrofitUnitTest.java │ └── webscoket │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle │ │ ├── libs │ │ └── java_websocket.jar │ │ ├── proguard-rules.pro │ │ ├── src │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── ttdevs │ │ │ │ └── webscoket │ │ │ │ └── ApplicationTest.java │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── ttdevs │ │ │ │ │ └── webscoket │ │ │ │ │ └── SocketServer.java │ │ │ └── res │ │ │ │ └── values │ │ │ │ └── strings.xml │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── ttdevs │ │ │ └── webscoket │ │ │ └── ExampleUnitTest.java │ │ └── websocket_html.zip └── settings.gradle └── README.md /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Your contributions are always welcome! 4 | 5 | Created by [ttdevs](https://github.com/ttdevs) -------------------------------------------------------------------------------- /DemoAnnotation/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/* 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | .cxx 10 | local.properties 11 | -------------------------------------------------------------------------------- /DemoAnnotation/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /DemoAnnotation/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /DemoAnnotation/app/src/androidTest/java/com/ttdevs/demo/annotation/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.ttdevs.demo.annotation; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.ttdevs.demo.annotation", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/java/com/ttdevs/demo/annotation/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.ttdevs.demo.annotation; 2 | 3 | import android.os.Bundle; 4 | import android.view.View; 5 | import android.widget.Toast; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | 9 | public class MainActivity extends AppCompatActivity implements View.OnClickListener { 10 | 11 | @Override 12 | protected void onCreate(Bundle savedInstanceState) { 13 | super.onCreate(savedInstanceState); 14 | setContentView(R.layout.activity_main); 15 | } 16 | 17 | @Override 18 | public void onClick(View v) { 19 | // switch (v.getId()) { 20 | // case R.id.btExam: 21 | // int result = StudentManager.INSTANCE.exam(); 22 | // Toast.makeText(this, "Exam: " + result, Toast.LENGTH_LONG).show(); 23 | // break; 24 | // case R.id.btStudy: 25 | // StudentManager.INSTANCE.study(); 26 | // break; 27 | // case R.id.btIntroduce: 28 | // StudentManager.INSTANCE.work(); 29 | // break; 30 | // default: 31 | // break; 32 | // } 33 | } 34 | } -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/java/com/ttdevs/demo/annotation/model/BaseStudent.java: -------------------------------------------------------------------------------- 1 | package com.ttdevs.demo.annotation.model; 2 | 3 | import java.util.Arrays; 4 | 5 | public class BaseStudent { 6 | public static final String DUTY_MONITOR = "ClassMonitor"; 7 | public static final String DUTY_CHINESE = "Chinese"; 8 | public static final String DUTY_MATH = "Math"; 9 | public static final String DUTY_ART = "Art"; 10 | public static final String DUTY_SPORT = "Sport"; 11 | 12 | public String name; 13 | public int age; 14 | public String[] duty; 15 | 16 | public BaseStudent() { 17 | 18 | } 19 | 20 | public int exam() { 21 | return (int) (Math.random() * 100); 22 | } 23 | 24 | public void study() { 25 | System.out.println(name + " is studying."); 26 | } 27 | 28 | public void work() { 29 | if (null == duty) { 30 | System.out.println(name + " duty is null"); 31 | } else { 32 | System.out.println(name + " duty is: " + Arrays.asList(duty)); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/java/com/ttdevs/demo/annotation/model/David.java: -------------------------------------------------------------------------------- 1 | package com.ttdevs.demo.annotation.model; 2 | 3 | import com.ttdevs.demo.lib.annotation.Student; 4 | 5 | @Student(name = "David", age = 50, duty = {BaseStudent.DUTY_MONITOR}) 6 | public class David extends BaseStudent { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/java/com/ttdevs/demo/annotation/model/Harry.java: -------------------------------------------------------------------------------- 1 | package com.ttdevs.demo.annotation.model; 2 | 3 | import com.ttdevs.demo.lib.annotation.Student; 4 | 5 | @Student(name = "Harry", age = 30, duty = BaseStudent.DUTY_MATH) 6 | public class Harry extends BaseStudent { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/java/com/ttdevs/demo/annotation/model/Jason.java: -------------------------------------------------------------------------------- 1 | package com.ttdevs.demo.annotation.model; 2 | 3 | import com.ttdevs.demo.lib.annotation.Student; 4 | 5 | @Student(name = "Jason", age = 20, duty = {BaseStudent.DUTY_CHINESE, BaseStudent.DUTY_SPORT}) 6 | public class Jason extends BaseStudent { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/java/com/ttdevs/demo/annotation/model/Norris.java: -------------------------------------------------------------------------------- 1 | package com.ttdevs.demo.annotation.model; 2 | 3 | import com.ttdevs.demo.lib.annotation.Student; 4 | import com.ttdevs.demo.lib.annotation.Teacher; 5 | 6 | @Teacher(name = "Zhang") 7 | @Student(name = "Norris", age = 28) 8 | public class Norris extends BaseStudent { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /DemoAnnotation/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |