├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── README ├── android_standard.md ├── git_standard.md └── java_standard.md ├── README_API.md ├── README_PROJECT.md ├── application ├── DevEnvironmentUse │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── afkt │ │ │ └── environment │ │ │ └── use │ │ │ ├── AppViewModel.kt │ │ │ ├── CustomAdapterModel.kt │ │ │ ├── CustomFragment.kt │ │ │ ├── MainActivity.kt │ │ │ ├── MainFragment.kt │ │ │ ├── base │ │ │ ├── AppApplication.kt │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseFragment.kt │ │ │ └── BaseViewModel.kt │ │ │ └── environment.kt │ │ └── res │ │ ├── drawable │ │ └── launcher_bg.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── custom_environment_adapter_item.xml │ │ ├── custom_module_adapter_item.xml │ │ ├── fragment_custom.xml │ │ └── fragment_main.xml │ │ ├── mipmap-xxhdpi │ │ ├── icon_launcher.webp │ │ ├── icon_launcher_round.webp │ │ └── launcher_window_bg.webp │ │ ├── navigation │ │ └── app_navigation.xml │ │ └── values │ │ └── resources.xml ├── DevHttpCaptureUse │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── afkt │ │ │ └── httpcapture │ │ │ └── use │ │ │ ├── MainActivity.kt │ │ │ ├── MainFragment.kt │ │ │ ├── MainViewModel.kt │ │ │ ├── RequestAPI.kt │ │ │ └── base │ │ │ ├── AppApplication.kt │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseFragment.kt │ │ │ └── BaseViewModel.kt │ │ └── res │ │ ├── drawable │ │ └── launcher_bg.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ └── fragment_main.xml │ │ ├── mipmap-xxhdpi │ │ ├── icon_launcher.webp │ │ ├── icon_launcher_round.webp │ │ └── launcher_window_bg.webp │ │ ├── navigation │ │ └── app_navigation.xml │ │ └── values │ │ └── resources.xml ├── DevHttpManagerUse │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── afkt │ │ │ └── httpmanager │ │ │ └── use │ │ │ ├── MainActivity.kt │ │ │ ├── MainFragment.kt │ │ │ ├── MainViewModel.kt │ │ │ ├── base │ │ │ ├── AppApplication.kt │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseFragment.kt │ │ │ └── BaseViewModel.kt │ │ │ ├── feature │ │ │ ├── media │ │ │ │ ├── RMFragment.kt │ │ │ │ ├── RMRepository.kt │ │ │ │ ├── RMViewModel.kt │ │ │ │ └── data │ │ │ │ │ ├── api │ │ │ │ │ ├── MediaAPI.kt │ │ │ │ │ └── MediaService.kt │ │ │ │ │ └── model │ │ │ │ │ └── MediaDataModel.kt │ │ │ └── progress │ │ │ │ ├── PMFragment.kt │ │ │ │ ├── PMRepository.kt │ │ │ │ └── PMViewModel.kt │ │ │ └── network │ │ │ ├── HttpCore.kt │ │ │ ├── builder │ │ │ ├── GlobalOkHttpBuilder.kt │ │ │ └── GlobalRetrofitResetListener.kt │ │ │ ├── config │ │ │ └── environment.kt │ │ │ ├── helper │ │ │ └── ResponseHelper.kt │ │ │ └── model │ │ │ └── ResponseModel.kt │ │ └── res │ │ ├── drawable │ │ └── launcher_bg.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── fragment_main.xml │ │ ├── fragment_progress_manager.xml │ │ └── fragment_retrofit_manager.xml │ │ ├── mipmap-xxhdpi │ │ ├── icon_launcher.webp │ │ ├── icon_launcher_round.webp │ │ └── launcher_window_bg.webp │ │ ├── navigation │ │ └── app_navigation.xml │ │ └── values │ │ └── resources.xml ├── DevRetrofitUse │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ ├── books.json │ │ ├── error.json │ │ ├── movie_detail.json │ │ └── photos.json │ │ ├── java │ │ └── afkt │ │ │ └── retrofit │ │ │ └── use │ │ │ ├── MainActivity.kt │ │ │ ├── MainFragment.kt │ │ │ ├── MainViewModel.kt │ │ │ ├── base │ │ │ ├── AppApplication.kt │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseFragment.kt │ │ │ └── BaseViewModel.kt │ │ │ ├── helper │ │ │ ├── DataModel.kt │ │ │ ├── RequestAPI.kt │ │ │ ├── ResponseHelper.kt │ │ │ └── ResponseModel.kt │ │ │ ├── request │ │ │ ├── RequestFragment.kt │ │ │ ├── RequestRepository.kt │ │ │ └── RequestViewModel.kt │ │ │ └── simple │ │ │ ├── SimpleFragment.kt │ │ │ ├── SimpleRepository.kt │ │ │ └── SimpleViewModel.kt │ │ └── res │ │ ├── drawable │ │ └── launcher_bg.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── fragment_main.xml │ │ ├── fragment_request.xml │ │ └── fragment_simple.xml │ │ ├── mipmap-xxhdpi │ │ ├── icon_launcher.webp │ │ ├── icon_launcher_round.webp │ │ └── launcher_window_bg.webp │ │ ├── navigation │ │ └── app_navigation.xml │ │ └── values │ │ └── resources.xml ├── DevUtilsApp │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ ├── filter │ │ │ ├── August.acv │ │ │ ├── Darker.acv │ │ │ ├── Dream.acv │ │ │ ├── Fornature.acv │ │ │ ├── Greens.acv │ │ │ └── Miami.acv │ │ ├── sku.json │ │ ├── sku_test.json │ │ └── therouter │ │ │ └── routeMap.json │ │ ├── java │ │ ├── afkt │ │ │ └── project │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── base │ │ │ │ ├── BaseApplication.kt │ │ │ │ ├── app │ │ │ │ │ └── BaseFragment.kt │ │ │ │ └── project │ │ │ │ │ ├── BaseActivity.kt │ │ │ │ │ ├── BaseProjectActivity.kt │ │ │ │ │ ├── BaseProjectViewModel.kt │ │ │ │ │ └── ProjectExt.kt │ │ │ │ ├── data_model │ │ │ │ ├── bean │ │ │ │ │ ├── Beans.kt │ │ │ │ │ └── Items.kt │ │ │ │ └── button │ │ │ │ │ ├── ButtonList.kt │ │ │ │ │ ├── ButtonValue.kt │ │ │ │ │ └── RouterPath.kt │ │ │ │ ├── feature │ │ │ │ ├── ButtonAdapter.kt │ │ │ │ ├── ButtonItemActivity.kt │ │ │ │ ├── ModuleActivity.kt │ │ │ │ ├── dev_engine │ │ │ │ │ └── DevAssistEngineActivity.kt │ │ │ │ ├── dev_sku │ │ │ │ │ ├── DevSKUActivity.kt │ │ │ │ │ ├── SKU.kt │ │ │ │ │ ├── SKUAdapter.kt │ │ │ │ │ └── SKUDialog.kt │ │ │ │ ├── dev_widget │ │ │ │ │ ├── corner_label │ │ │ │ │ │ └── CornerLabelActivity.kt │ │ │ │ │ ├── flip_card │ │ │ │ │ │ ├── FlipCardActivity.kt │ │ │ │ │ │ └── FlipCardAdapter.kt │ │ │ │ │ ├── flow_like │ │ │ │ │ │ └── FlowLikeActivity.kt │ │ │ │ │ ├── line_view │ │ │ │ │ │ └── LineActivity.kt │ │ │ │ │ ├── progress_bar │ │ │ │ │ │ └── ProgressBarActivity.kt │ │ │ │ │ ├── recy_item_decoration │ │ │ │ │ │ ├── CommonColorItemDecorationAssist.kt │ │ │ │ │ │ ├── color_grid │ │ │ │ │ │ │ ├── GridColorItemDecorationActivity.kt │ │ │ │ │ │ │ └── GridColorItemDecorationAssist.kt │ │ │ │ │ │ ├── color_linear │ │ │ │ │ │ │ ├── LinearColorItemDecorationActivity.kt │ │ │ │ │ │ │ └── LinearColorItemDecorationAssist.kt │ │ │ │ │ │ └── common │ │ │ │ │ │ │ ├── GridHorizontalTextAdapter.kt │ │ │ │ │ │ │ ├── GridVerticalTextAdapter.kt │ │ │ │ │ │ │ ├── LinearHorizontalTextAdapter.kt │ │ │ │ │ │ │ └── LinearVerticalTextAdapter.kt │ │ │ │ │ ├── scan_shape │ │ │ │ │ │ ├── ScanShapeActivity.kt │ │ │ │ │ │ └── ScanShapeUtils.kt │ │ │ │ │ ├── sign_view │ │ │ │ │ │ └── SignActivity.kt │ │ │ │ │ ├── view_assist │ │ │ │ │ │ ├── RecyclerLoadingAdapter.kt │ │ │ │ │ │ ├── ViewAssistActivity.kt │ │ │ │ │ │ ├── ViewAssistRecyclerViewLoadActivity.kt │ │ │ │ │ │ └── ViewAssistUtils.kt │ │ │ │ │ ├── view_pager │ │ │ │ │ │ ├── ViewPagerActivity.kt │ │ │ │ │ │ └── ViewPagerAdapter.kt │ │ │ │ │ ├── wave_view │ │ │ │ │ │ └── WaveViewActivity.kt │ │ │ │ │ └── wrap_view │ │ │ │ │ │ └── WrapActivity.kt │ │ │ │ ├── lib_frame │ │ │ │ │ └── data_store │ │ │ │ │ │ ├── DataStoreActivity.kt │ │ │ │ │ │ ├── DataStoreUse.kt │ │ │ │ │ │ └── DataStoreUtils.kt │ │ │ │ ├── other_function │ │ │ │ │ ├── add_contact │ │ │ │ │ │ └── AddContactActivity.kt │ │ │ │ │ ├── dev_function │ │ │ │ │ │ ├── ActivityResultAPIActivity.kt │ │ │ │ │ │ ├── ActivityResultCallbackActivity.kt │ │ │ │ │ │ ├── CacheActivity.kt │ │ │ │ │ │ ├── CrashCatchActivity.kt │ │ │ │ │ │ ├── FileRecordActivity.kt │ │ │ │ │ │ ├── FunctionActivity.kt │ │ │ │ │ │ ├── LoggerActivity.kt │ │ │ │ │ │ ├── PathActivity.kt │ │ │ │ │ │ └── WallpaperActivity.kt │ │ │ │ │ ├── floating │ │ │ │ │ │ ├── FloatingWindowManager2Activity.kt │ │ │ │ │ │ └── FloatingWindowManagerActivity.kt │ │ │ │ │ ├── service │ │ │ │ │ │ ├── AccessibilityListenerService.kt │ │ │ │ │ │ ├── AccessibilityListenerServiceActivity.kt │ │ │ │ │ │ ├── NotificationService.kt │ │ │ │ │ │ └── NotificationServiceActivity.kt │ │ │ │ │ ├── timer │ │ │ │ │ │ └── TimerActivity.kt │ │ │ │ │ └── web_view │ │ │ │ │ │ └── WebViewActivity.kt │ │ │ │ └── ui_effect │ │ │ │ │ ├── adapter_edits │ │ │ │ │ ├── AdapterEditsActivity.kt │ │ │ │ │ └── EditsAdapter.kt │ │ │ │ │ ├── capture_picture │ │ │ │ │ ├── CapturePictureActivity.kt │ │ │ │ │ ├── CapturePictureGridActivity.kt │ │ │ │ │ ├── CapturePictureListActivity.kt │ │ │ │ │ ├── CapturePictureRecyActivity.kt │ │ │ │ │ └── CapturePictureWebActivity.kt │ │ │ │ │ ├── common │ │ │ │ │ ├── TabItem.kt │ │ │ │ │ ├── TabLayoutAssist.kt │ │ │ │ │ └── UIEffectActivity.kt │ │ │ │ │ ├── flexbox_layout │ │ │ │ │ ├── FlexboxLayoutManagerActivity.kt │ │ │ │ │ └── FlexboxTextAdapter.kt │ │ │ │ │ ├── gpu │ │ │ │ │ ├── GPUFilterACVActivity.kt │ │ │ │ │ ├── GPUFilterACVAdapter.kt │ │ │ │ │ ├── GPUFilterActivity.kt │ │ │ │ │ ├── GPUFilterAdapter.kt │ │ │ │ │ ├── GPUFilterUtils.kt │ │ │ │ │ └── bean │ │ │ │ │ │ ├── ACVFileBean.kt │ │ │ │ │ │ └── FilterItem.kt │ │ │ │ │ ├── material │ │ │ │ │ ├── BottomSheetActivity.kt │ │ │ │ │ ├── BottomSheetDialog.kt │ │ │ │ │ ├── BottomSheetDialogActivity.kt │ │ │ │ │ ├── ChipActivity.kt │ │ │ │ │ └── ShapeableImageViewActivity.kt │ │ │ │ │ ├── multi_select │ │ │ │ │ ├── MultiSelectActivity.kt │ │ │ │ │ └── MultiSelectAdapter.kt │ │ │ │ │ ├── palette │ │ │ │ │ ├── PaletteActivity.kt │ │ │ │ │ ├── PaletteFragment.kt │ │ │ │ │ └── PaletteViewModel.kt │ │ │ │ │ ├── qrcode │ │ │ │ │ ├── QRCodeCreateActivity.kt │ │ │ │ │ ├── QRCodeImageActivity.kt │ │ │ │ │ ├── QRCodeScanActivity.kt │ │ │ │ │ └── zxing │ │ │ │ │ │ ├── zxing_decode.kt │ │ │ │ │ │ └── zxing_decode_assist.kt │ │ │ │ │ ├── recy_adapter │ │ │ │ │ ├── adapter_concat │ │ │ │ │ │ ├── RecyConcatAdapterActivity.kt │ │ │ │ │ │ └── adapter │ │ │ │ │ │ │ ├── ArticleConcatAdapter.kt │ │ │ │ │ │ │ ├── BannerConcatAdapter.kt │ │ │ │ │ │ │ ├── CommodityConcatAdapter.kt │ │ │ │ │ │ │ ├── HeaderFooterConcatAdapter.kt │ │ │ │ │ │ │ └── ShapeableImageConcatAdapter.kt │ │ │ │ │ ├── adapter_multitype │ │ │ │ │ │ ├── RecyMultiTypeAdapterActivity.kt │ │ │ │ │ │ └── adapter │ │ │ │ │ │ │ ├── ArticleItemViewBinder.kt │ │ │ │ │ │ │ ├── BannerItemViewBinder.kt │ │ │ │ │ │ │ ├── Classify1ItemViewBinder.kt │ │ │ │ │ │ │ ├── Classify2ItemViewBinder.kt │ │ │ │ │ │ │ ├── Classify3ItemViewBinder.kt │ │ │ │ │ │ │ ├── CommodityEvaluateItemViewBinder.kt │ │ │ │ │ │ │ ├── CommodityItemViewBinder.kt │ │ │ │ │ │ │ ├── HeaderFooterItemViewBinder.kt │ │ │ │ │ │ │ └── ShapeableImageItemViewBinder.kt │ │ │ │ │ ├── item_slide │ │ │ │ │ │ ├── ItemSlideAdapter.kt │ │ │ │ │ │ └── RecyItemSlideActivity.kt │ │ │ │ │ ├── item_sticky │ │ │ │ │ │ ├── ItemStickyActivity.kt │ │ │ │ │ │ ├── ItemStickyAdapter.kt │ │ │ │ │ │ └── ItemStickyBean.kt │ │ │ │ │ ├── linear_snap │ │ │ │ │ │ ├── LinearSnapActivity.kt │ │ │ │ │ │ ├── LinearSnapAdapter.kt │ │ │ │ │ │ ├── LinearSnapMAXActivity.kt │ │ │ │ │ │ └── LinearSnapMAXAdapter.kt │ │ │ │ │ ├── pager_snap │ │ │ │ │ │ ├── PagerSnapActivity.kt │ │ │ │ │ │ ├── PagerSnapAdapter.kt │ │ │ │ │ │ ├── PagerSnapMAXActivity.kt │ │ │ │ │ │ └── PagerSnapMAXAdapter.kt │ │ │ │ │ └── recy_concat.kt │ │ │ │ │ ├── shop_cart_anim │ │ │ │ │ ├── ShopCartAddAnimActivity.kt │ │ │ │ │ ├── ShopCartAnimAdapter.kt │ │ │ │ │ └── ShopCartFloating.kt │ │ │ │ │ ├── text_calc │ │ │ │ │ └── TextCalcActivity.kt │ │ │ │ │ ├── text_view │ │ │ │ │ └── TextViewActivity.kt │ │ │ │ │ ├── toast_tint │ │ │ │ │ └── ToastTintActivity.kt │ │ │ │ │ └── view_pager2 │ │ │ │ │ ├── PagerFragment.kt │ │ │ │ │ └── ViewPager2Activity.kt │ │ │ │ └── ui │ │ │ │ ├── media_config_create.kt │ │ │ │ ├── permission_request.kt │ │ │ │ └── widget │ │ │ │ ├── AutoGridView.java │ │ │ │ ├── SlideImageView.java │ │ │ │ └── VerticalScrollView.java │ │ └── utils_use │ │ │ ├── cache │ │ │ └── CacheUse.java │ │ │ ├── logger │ │ │ ├── LogTools.java │ │ │ ├── LoggerUse.java │ │ │ └── TestData.java │ │ │ ├── media │ │ │ └── MediaUse.java │ │ │ ├── record │ │ │ └── FileRecordUse.java │ │ │ ├── share │ │ │ └── ShareUse.java │ │ │ ├── snackbar │ │ │ └── SnackbarUse.java │ │ │ ├── text │ │ │ └── TextCalcUse.java │ │ │ ├── thread │ │ │ └── ThreadUse.java │ │ │ ├── toast │ │ │ ├── DevToastUse.java │ │ │ └── ToastTintUse.java │ │ │ └── wifi │ │ │ └── WifiHotUse.java │ │ ├── res-base │ │ └── layout │ │ │ ├── base_toolbar.xml │ │ │ ├── base_view_button.xml │ │ │ ├── base_view_recyclerview.xml │ │ │ └── base_view_textview.xml │ │ ├── res-function │ │ └── layout │ │ │ ├── activity_activity_result_api.xml │ │ │ ├── activity_activity_result_callback.xml │ │ │ ├── activity_add_contact.xml │ │ │ ├── activity_wallpaper.xml │ │ │ ├── activity_webview.xml │ │ │ └── layout_floating.xml │ │ ├── res-lib │ │ └── layout │ │ │ └── activity_data_store.xml │ │ ├── res-sku │ │ ├── drawable-xxhdpi │ │ │ ├── sku_icon_add_black.webp │ │ │ ├── sku_icon_add_grey.webp │ │ │ ├── sku_icon_close.webp │ │ │ ├── sku_icon_reduce_black.webp │ │ │ └── sku_icon_reduce_grey.webp │ │ ├── drawable │ │ │ ├── sku_edit_cursor_color_style.xml │ │ │ ├── sku_gradient_92ba37_bfe076_corners10.xml │ │ │ ├── sku_selector_add_icon.xml │ │ │ ├── sku_selector_reduce_icon.xml │ │ │ ├── sku_shape_f6f6f6_corners6.xml │ │ │ ├── sku_shape_stroked_92ba37_corners6.xml │ │ │ └── sku_shape_stroked_f6f6f6_corners6_dash.xml │ │ ├── layout │ │ │ ├── sku_adapter_spec.xml │ │ │ ├── sku_adapter_spec_item.xml │ │ │ └── sku_dialog_spec.xml │ │ └── values │ │ │ └── colors.xml │ │ ├── res-ui-widget │ │ ├── drawable-xxhdpi │ │ │ ├── icon_annulus.png │ │ │ ├── icon_electric_fan.png │ │ │ ├── icon_electric_leaf.png │ │ │ ├── icon_electric_loading.png │ │ │ ├── icon_empty.png │ │ │ ├── icon_error.png │ │ │ ├── icon_flashlight_off.png │ │ │ ├── icon_flashlight_on.png │ │ │ ├── icon_hexagon.png │ │ │ ├── icon_image.png │ │ │ ├── icon_live_brow_1.png │ │ │ ├── icon_live_brow_2.png │ │ │ ├── icon_live_brow_3.png │ │ │ ├── icon_live_brow_4.png │ │ │ ├── icon_live_brow_5.png │ │ │ ├── icon_refresh.png │ │ │ ├── icon_square.png │ │ │ └── img_commodity.jpg │ │ ├── drawable │ │ │ └── shape_flashlight_selector.xml │ │ └── layout │ │ │ ├── activity_corner_label.xml │ │ │ ├── activity_flip_card.xml │ │ │ ├── activity_flow_like.xml │ │ │ ├── activity_grid_item_decoration.xml │ │ │ ├── activity_line.xml │ │ │ ├── activity_linear_item_decoration.xml │ │ │ ├── activity_progressbar.xml │ │ │ ├── activity_scan_shape.xml │ │ │ ├── activity_view_assist.xml │ │ │ ├── activity_view_pager.xml │ │ │ ├── activity_wave_view.xml │ │ │ ├── activity_wrap.xml │ │ │ ├── adapter_grid_horizontal_text.xml │ │ │ ├── adapter_grid_vertical_text.xml │ │ │ ├── adapter_linear_horizontal_text.xml │ │ │ ├── adapter_linear_vertical_text.xml │ │ │ ├── adapter_recycler_loading.xml │ │ │ ├── include_grid_item_decoration_assist.xml │ │ │ ├── include_linear_item_decoration_assist.xml │ │ │ ├── view_assist_content.xml │ │ │ ├── view_assist_custom.xml │ │ │ ├── view_assist_empty.xml │ │ │ ├── view_assist_error.xml │ │ │ ├── view_assist_loading.xml │ │ │ ├── view_assist_loading2.xml │ │ │ ├── view_assist_loading3.xml │ │ │ ├── view_assist_recy_failed.xml │ │ │ ├── view_assist_recy_loading.xml │ │ │ └── view_pager_item_view.xml │ │ ├── res-ui │ │ ├── color │ │ │ └── selector_tab_text_color.xml │ │ ├── drawable-xxhdpi │ │ │ ├── bg_wallpaper.png │ │ │ ├── bg_wallpaper2.png │ │ │ ├── btn_normal.9.png │ │ │ ├── btn_pressed.9.png │ │ │ ├── icon_selected.png │ │ │ ├── icon_shop_cart_add_red.png │ │ │ ├── icon_shop_cart_white.png │ │ │ ├── icon_star_selected.png │ │ │ ├── icon_star_unselected.png │ │ │ └── icon_unselected.png │ │ ├── drawable │ │ │ ├── shape_bg_black_top_r10.xml │ │ │ ├── shape_bg_blue_top_r10.xml │ │ │ ├── shape_bg_white_r10.xml │ │ │ ├── shape_multiselect_selector.xml │ │ │ ├── shape_tab_left_normal.xml │ │ │ ├── shape_tab_left_pressed.xml │ │ │ ├── shape_tab_left_selector.xml │ │ │ ├── shape_tab_right_normal.xml │ │ │ ├── shape_tab_right_pressed.xml │ │ │ └── shape_tab_right_selector.xml │ │ ├── layout │ │ │ ├── activity_bottom_sheet.xml │ │ │ ├── activity_bottom_sheet_dialog.xml │ │ │ ├── activity_capture_picture.xml │ │ │ ├── activity_capture_picture_grid.xml │ │ │ ├── activity_capture_picture_list.xml │ │ │ ├── activity_capture_picture_recy.xml │ │ │ ├── activity_capture_picture_web.xml │ │ │ ├── activity_chip.xml │ │ │ ├── activity_gpu_filter.xml │ │ │ ├── activity_palette.xml │ │ │ ├── activity_qrcode_create.xml │ │ │ ├── activity_qrcode_image.xml │ │ │ ├── activity_shapeable_image_view.xml │ │ │ ├── activity_text_calc.xml │ │ │ ├── activity_textview.xml │ │ │ ├── activity_ui_effect.xml │ │ │ ├── activity_viewpager2.xml │ │ │ ├── adapter_capture_picture.xml │ │ │ ├── adapter_concat_article.xml │ │ │ ├── adapter_concat_banner.xml │ │ │ ├── adapter_concat_banner_image.xml │ │ │ ├── adapter_concat_classify.xml │ │ │ ├── adapter_concat_header_footer.xml │ │ │ ├── adapter_concat_shapeable_image.xml │ │ │ ├── adapter_flexbox_text.xml │ │ │ ├── adapter_item_edits.xml │ │ │ ├── adapter_item_shop_cart_anim.xml │ │ │ ├── adapter_item_sticky.xml │ │ │ ├── adapter_linear_snap.xml │ │ │ ├── adapter_multi_select.xml │ │ │ ├── adapter_pager_snap.xml │ │ │ ├── adapter_sticky_view.xml │ │ │ ├── dialog_bottom_sheet.xml │ │ │ ├── fragment_pager.xml │ │ │ ├── fragment_palette.xml │ │ │ ├── include_bottom_shop_cart_floating.xml │ │ │ ├── include_bottom_shop_cart_floating_anim_view.xml │ │ │ ├── include_chip.xml │ │ │ └── tab_item_view.xml │ │ ├── menu │ │ │ └── menu_pager.xml │ │ ├── raw │ │ │ ├── wallpaper_1.jpg │ │ │ ├── wallpaper_2.jpg │ │ │ ├── wallpaper_3.jpg │ │ │ ├── wallpaper_4.jpg │ │ │ └── wallpaper_5.jpg │ │ └── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ └── res │ │ ├── drawable-xxhdpi │ │ └── icon_tips.png │ │ ├── drawable │ │ ├── shape_border_image.xml │ │ ├── shape_layer_triangle_bottom.xml │ │ ├── shape_layer_triangle_left.xml │ │ ├── shape_layer_triangle_right.xml │ │ ├── shape_layer_triangle_top.xml │ │ ├── shape_oval_annular.xml │ │ ├── shape_oval_annular2.xml │ │ └── touch.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── state_layout_fail.xml │ │ ├── state_layout_ing.xml │ │ └── state_layout_no_data.xml │ │ ├── mipmap-xxxhdpi │ │ ├── icon.png │ │ ├── icon_launcher.png │ │ └── icon_launcher_round.png │ │ ├── raw │ │ └── dev_beep.ogg │ │ ├── values-zh │ │ └── strings.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ ├── unified.xml │ │ └── values.xml │ │ └── xml │ │ └── accessibility_config.xml └── README.md ├── art └── module.png ├── bintray.properties ├── build.gradle ├── dev_utils.properties ├── file ├── deps │ ├── deps_android.gradle │ ├── deps_dev_utils.gradle │ ├── deps_other.gradle │ ├── deps_profiler.gradle │ └── local │ │ ├── local_dev_utils.gradle │ │ └── prop_dev_utils.gradle ├── gradle │ ├── build │ │ ├── build_app.gradle │ │ ├── lib_app.gradle │ │ ├── lib_app_java.gradle │ │ ├── lib_java.gradle │ │ ├── router │ │ │ ├── arouter │ │ │ │ ├── build_arouter_app.gradle │ │ │ │ └── build_arouter_module.gradle │ │ │ ├── build_router_app.gradle │ │ │ ├── build_router_module.gradle │ │ │ └── therouter │ │ │ │ ├── build_therouter_app.gradle │ │ │ │ └── build_therouter_module.gradle │ │ └── unified │ │ │ └── unified_library_config.gradle │ ├── config.gradle │ ├── config_files.gradle │ ├── config_libs.gradle │ ├── upload │ │ ├── bintray │ │ │ ├── bintrayUploadAndroid.gradle │ │ │ └── bintrayUploadJava.gradle │ │ └── sonatype │ │ │ ├── sonatypeUploadAndroid.gradle │ │ │ └── sonatypeUploadJava.gradle │ └── versions.gradle └── sign │ └── demo.jks ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lib ├── DevApp │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── dev │ │ │ ├── DevUtils.java │ │ │ └── utils │ │ │ ├── DevFinal.java │ │ │ ├── JCLogUtils.java │ │ │ ├── LogPrintUtils.java │ │ │ ├── app │ │ │ ├── ADBUtils.java │ │ │ ├── AccessibilityUtils.java │ │ │ ├── ActivityResultUtils.java │ │ │ ├── ActivityUtils.java │ │ │ ├── AlarmUtils.java │ │ │ ├── AppUtils.java │ │ │ ├── AudioManagerUtils.java │ │ │ ├── BarUtils.java │ │ │ ├── BatteryUtils.java │ │ │ ├── BrightnessUtils.java │ │ │ ├── CPUUtils.java │ │ │ ├── CapturePictureUtils.java │ │ │ ├── CleanUtils.java │ │ │ ├── ClickUtils.java │ │ │ ├── ClipboardUtils.java │ │ │ ├── ContentResolverUtils.java │ │ │ ├── CrashUtils.java │ │ │ ├── CursorUtils.java │ │ │ ├── DBUtils.java │ │ │ ├── DevicePolicyUtils.java │ │ │ ├── DeviceUtils.java │ │ │ ├── DialogUtils.java │ │ │ ├── DownloadUtils.java │ │ │ ├── EditTextUtils.java │ │ │ ├── FlashlightUtils.java │ │ │ ├── FragmentUtils.java │ │ │ ├── HandlerUtils.java │ │ │ ├── ImageViewUtils.java │ │ │ ├── IntentUtils.java │ │ │ ├── JSONObjectUtils.java │ │ │ ├── KeyBoardUtils.java │ │ │ ├── KeyguardUtils.java │ │ │ ├── LanguageUtils.java │ │ │ ├── ListViewUtils.java │ │ │ ├── ListenerUtils.java │ │ │ ├── LocationUtils.java │ │ │ ├── ManifestUtils.java │ │ │ ├── MediaStoreUtils.java │ │ │ ├── MemoryUtils.java │ │ │ ├── NetWorkUtils.java │ │ │ ├── NotificationUtils.java │ │ │ ├── PathUtils.java │ │ │ ├── PhoneUtils.java │ │ │ ├── PowerManagerUtils.java │ │ │ ├── ProcessUtils.java │ │ │ ├── ROMUtils.java │ │ │ ├── ReceiverUtils.java │ │ │ ├── RecyclerViewUtils.java │ │ │ ├── ResourcePluginUtils.java │ │ │ ├── ResourceUtils.java │ │ │ ├── SDCardUtils.java │ │ │ ├── ScreenUtils.java │ │ │ ├── ScreenshotUtils.java │ │ │ ├── ServiceUtils.java │ │ │ ├── ShapeUtils.java │ │ │ ├── ShellUtils.java │ │ │ ├── ShortCutUtils.java │ │ │ ├── SignaturesUtils.java │ │ │ ├── SizeUtils.java │ │ │ ├── SnackbarUtils.java │ │ │ ├── SpanUtils.java │ │ │ ├── StateListUtils.java │ │ │ ├── TextViewUtils.java │ │ │ ├── UriUtils.java │ │ │ ├── VersionUtils.java │ │ │ ├── VibrationUtils.java │ │ │ ├── ViewUtils.java │ │ │ ├── WallpaperUtils.java │ │ │ ├── WidgetUtils.java │ │ │ ├── WindowUtils.java │ │ │ ├── activity_result │ │ │ │ └── ActivityResultAssist.java │ │ │ ├── anim │ │ │ │ ├── AnimationUtils.java │ │ │ │ └── ViewAnimationUtils.java │ │ │ ├── assist │ │ │ │ ├── ActivityManagerAssist.java │ │ │ │ ├── BeepVibrateAssist.java │ │ │ │ ├── DelayAssist.java │ │ │ │ ├── InactivityTimerAssist.java │ │ │ │ ├── ResourceAssist.java │ │ │ │ ├── ScreenSensorAssist.java │ │ │ │ ├── WindowAssist.java │ │ │ │ ├── exif │ │ │ │ │ ├── ExifAssist.java │ │ │ │ │ └── ExifTag.java │ │ │ │ ├── floating │ │ │ │ │ ├── DevFloatingCommon.java │ │ │ │ │ ├── DevFloatingEdgeIMPL.java │ │ │ │ │ ├── DevFloatingListener.java │ │ │ │ │ ├── DevFloatingTouchIMPL.java │ │ │ │ │ ├── DevFloatingTouchIMPL2.java │ │ │ │ │ ├── FloatingWindowManagerAssist.java │ │ │ │ │ ├── FloatingWindowManagerAssist2.java │ │ │ │ │ ├── IFloatingActivity.java │ │ │ │ │ ├── IFloatingEdge.java │ │ │ │ │ ├── IFloatingListener.java │ │ │ │ │ ├── IFloatingOperate.java │ │ │ │ │ └── IFloatingTouch.java │ │ │ │ ├── lifecycle │ │ │ │ │ ├── AbstractActivityLifecycle.java │ │ │ │ │ ├── ActivityLifecycleAssist.java │ │ │ │ │ ├── ActivityLifecycleFilter.java │ │ │ │ │ ├── ActivityLifecycleGet.java │ │ │ │ │ ├── ActivityLifecycleNotify.java │ │ │ │ │ ├── OnActivityDestroyedListener.java │ │ │ │ │ ├── OnAppStatusChangedListener.java │ │ │ │ │ ├── current │ │ │ │ │ │ └── ThisActivityLifecycleAssist.java │ │ │ │ │ └── fragment │ │ │ │ │ │ ├── AbstractFragmentLifecycle.java │ │ │ │ │ │ ├── FragmentLifecycleAssist.java │ │ │ │ │ │ └── FragmentLifecycleFilter.java │ │ │ │ ├── record │ │ │ │ │ └── AppRecordInsert.java │ │ │ │ └── url │ │ │ │ │ └── AndroidUrlParser.java │ │ │ ├── cache │ │ │ │ ├── DevCache.java │ │ │ │ └── DevCacheManager.java │ │ │ ├── helper │ │ │ │ ├── BaseHelper.java │ │ │ │ ├── dev │ │ │ │ │ ├── DevHelper.java │ │ │ │ │ └── IHelperByDev.java │ │ │ │ ├── flow │ │ │ │ │ └── FlowHelper.java │ │ │ │ ├── quick │ │ │ │ │ ├── IHelperByQuick.java │ │ │ │ │ └── QuickHelper.java │ │ │ │ ├── version │ │ │ │ │ ├── IHelperByVersion.java │ │ │ │ │ └── VersionHelper.java │ │ │ │ └── view │ │ │ │ │ ├── IHelperByView.java │ │ │ │ │ └── ViewHelper.java │ │ │ ├── image │ │ │ │ ├── BitmapUtils.java │ │ │ │ ├── ImageFilterUtils.java │ │ │ │ └── ImageUtils.java │ │ │ ├── info │ │ │ │ ├── ApkInfoItem.java │ │ │ │ ├── AppInfoBean.java │ │ │ │ ├── AppInfoItem.java │ │ │ │ ├── AppInfoUtils.java │ │ │ │ └── KeyValue.java │ │ │ ├── logger │ │ │ │ ├── DevLogger.java │ │ │ │ ├── IPrinter.java │ │ │ │ ├── LogConfig.java │ │ │ │ ├── LogConstants.java │ │ │ │ ├── LogLevel.java │ │ │ │ └── LoggerPrinter.java │ │ │ ├── player │ │ │ │ ├── DevMediaManager.java │ │ │ │ └── DevVideoPlayerControl.java │ │ │ ├── share │ │ │ │ ├── IPreference.java │ │ │ │ ├── IPreferenceHolder.java │ │ │ │ ├── OnSPOperateListener.java │ │ │ │ ├── PreferenceImpl.java │ │ │ │ ├── SPUtils.java │ │ │ │ └── SharedUtils.java │ │ │ └── timer │ │ │ │ ├── DevTimer.java │ │ │ │ └── TimerManager.java │ │ │ └── common │ │ │ ├── ArrayUtils.java │ │ │ ├── BigDecimalUtils.java │ │ │ ├── CalendarUtils.java │ │ │ ├── ChineseUtils.java │ │ │ ├── ClassUtils.java │ │ │ ├── CloneUtils.java │ │ │ ├── CloseUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── ColorUtils.java │ │ │ ├── ConvertUtils.java │ │ │ ├── CoordinateUtils.java │ │ │ ├── DateUtils.java │ │ │ ├── DevCommonUtils.java │ │ │ ├── EncodeUtils.java │ │ │ ├── FieldUtils.java │ │ │ ├── FileIOUtils.java │ │ │ ├── FileUtils.java │ │ │ ├── ForUtils.java │ │ │ ├── FormatUtils.java │ │ │ ├── HtmlUtils.java │ │ │ ├── HttpParamsUtils.java │ │ │ ├── HttpURLConnectionUtils.java │ │ │ ├── MapUtils.java │ │ │ ├── NumberUtils.java │ │ │ ├── ObjectUtils.java │ │ │ ├── RandomUtils.java │ │ │ ├── Reflect2Utils.java │ │ │ ├── ReflectUtils.java │ │ │ ├── ScaleUtils.java │ │ │ ├── StreamUtils.java │ │ │ ├── StringUtils.java │ │ │ ├── ThrowableUtils.java │ │ │ ├── TypeUtils.java │ │ │ ├── ZipUtils.java │ │ │ ├── able │ │ │ ├── Bindingable.java │ │ │ ├── Byable.java │ │ │ ├── Calculateable.java │ │ │ ├── Callable.java │ │ │ ├── Cloneable.java │ │ │ ├── Closeable.java │ │ │ ├── Commandable.java │ │ │ ├── Consumerable.java │ │ │ ├── Convertable.java │ │ │ ├── Copyable.java │ │ │ ├── Correctable.java │ │ │ ├── Decodeable.java │ │ │ ├── Decryptable.java │ │ │ ├── Editorable.java │ │ │ ├── Encodeable.java │ │ │ ├── Encryptable.java │ │ │ ├── Errorable.java │ │ │ ├── Filterable.java │ │ │ ├── Findable.java │ │ │ ├── Flowable.java │ │ │ ├── Functionable.java │ │ │ ├── Getable.java │ │ │ ├── IOable.java │ │ │ ├── Inputable.java │ │ │ ├── Interceptable.java │ │ │ ├── Methodable.java │ │ │ ├── Modifyable.java │ │ │ ├── Notifyable.java │ │ │ ├── Ofable.java │ │ │ ├── Operatorable.java │ │ │ ├── Outputable.java │ │ │ ├── Parseable.java │ │ │ ├── Pasteable.java │ │ │ ├── Queryable.java │ │ │ ├── Readable.java │ │ │ ├── Refreshable.java │ │ │ ├── Replaceable.java │ │ │ ├── Routerable.java │ │ │ ├── Searchable.java │ │ │ ├── Sendable.java │ │ │ ├── Sortable.java │ │ │ ├── Splitable.java │ │ │ ├── Supplierable.java │ │ │ ├── Taskable.java │ │ │ ├── Threadable.java │ │ │ ├── Toable.java │ │ │ ├── UnBinderable.java │ │ │ └── Writeable.java │ │ │ ├── assist │ │ │ ├── Averager.java │ │ │ ├── FlagsValue.java │ │ │ ├── KeyValueAssist.java │ │ │ ├── TimeAverager.java │ │ │ ├── TimeCounter.java │ │ │ ├── TimeKeeper.java │ │ │ ├── WeakReferenceAssist.java │ │ │ ├── record │ │ │ │ ├── FileRecordUtils.java │ │ │ │ ├── RecordConfig.java │ │ │ │ └── RecordInsert.java │ │ │ ├── search │ │ │ │ ├── FileBreadthFirstSearchUtils.java │ │ │ │ └── FileDepthFirstSearchUtils.java │ │ │ └── url │ │ │ │ ├── DevJavaUrlParser.java │ │ │ │ └── UrlExtras.java │ │ │ ├── cipher │ │ │ ├── Base64.java │ │ │ ├── Base64Cipher.java │ │ │ ├── Cipher.java │ │ │ ├── CipherUtils.java │ │ │ ├── Decrypt.java │ │ │ └── Encrypt.java │ │ │ ├── comparator │ │ │ ├── ComparatorUtils.java │ │ │ └── sort │ │ │ │ ├── DateSort.java │ │ │ │ ├── DateSortAsc.java │ │ │ │ ├── DateSortDesc.java │ │ │ │ ├── DoubleSort.java │ │ │ │ ├── DoubleSortAsc.java │ │ │ │ ├── DoubleSortDesc.java │ │ │ │ ├── FileLastModifiedSortAsc.java │ │ │ │ ├── FileLastModifiedSortDesc.java │ │ │ │ ├── FileLengthSortAsc.java │ │ │ │ ├── FileLengthSortDesc.java │ │ │ │ ├── FileNameSortAsc.java │ │ │ │ ├── FileNameSortDesc.java │ │ │ │ ├── FileSortAsc.java │ │ │ │ ├── FileSortDesc.java │ │ │ │ ├── FloatSort.java │ │ │ │ ├── FloatSortAsc.java │ │ │ │ ├── FloatSortDesc.java │ │ │ │ ├── IntSort.java │ │ │ │ ├── IntSortAsc.java │ │ │ │ ├── IntSortDesc.java │ │ │ │ ├── LongSort.java │ │ │ │ ├── LongSortAsc.java │ │ │ │ ├── LongSortDesc.java │ │ │ │ ├── StringSort.java │ │ │ │ ├── StringSortAsc.java │ │ │ │ ├── StringSortDesc.java │ │ │ │ ├── StringSortWindowsSimple.java │ │ │ │ ├── StringSortWindowsSimple2.java │ │ │ │ ├── WindowsExplorerFileSimpleComparator.java │ │ │ │ ├── WindowsExplorerFileSimpleComparator2.java │ │ │ │ ├── WindowsExplorerStringSimpleComparator.java │ │ │ │ └── WindowsExplorerStringSimpleComparator2.java │ │ │ ├── encrypt │ │ │ ├── AESUtils.java │ │ │ ├── CRCUtils.java │ │ │ ├── DESUtils.java │ │ │ ├── EncryptUtils.java │ │ │ ├── EscapeUtils.java │ │ │ ├── MD5Utils.java │ │ │ ├── SHAUtils.java │ │ │ ├── TripleDESUtils.java │ │ │ └── XorUtils.java │ │ │ ├── file │ │ │ ├── FilePartAssist.java │ │ │ ├── FilePartItem.java │ │ │ └── FilePartUtils.java │ │ │ ├── format │ │ │ ├── ArgsFormatter.java │ │ │ └── UnitSpanFormatter.java │ │ │ ├── random │ │ │ └── AliasMethod.java │ │ │ ├── thread │ │ │ ├── DevThreadManager.java │ │ │ └── DevThreadPool.java │ │ │ └── validator │ │ │ ├── BankCheckUtils.java │ │ │ ├── IDCardUtils.java │ │ │ ├── ValiToPhoneUtils.java │ │ │ └── ValidatorUtils.java │ │ └── res │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values │ │ ├── color.xml │ │ └── strings.xml │ │ └── xml │ │ └── dev_app_provider_paths.xml ├── DevAssist │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── dev │ │ ├── DevAssist.java │ │ ├── adapter │ │ ├── DevDataAdapter.java │ │ ├── DevDataAdapterExt.java │ │ ├── DevDataAdapterExt2.java │ │ ├── DevDataList.java │ │ └── DevDataListExt.java │ │ ├── assist │ │ ├── DataAssist.java │ │ ├── DevTimerAssist.java │ │ ├── EditTextSearchAssist.java │ │ ├── EditTextWatcherAssist.java │ │ ├── NumberControlAssist.java │ │ └── PageAssist.java │ │ ├── base │ │ ├── DevDataSource.java │ │ ├── DevEntry.java │ │ ├── DevHistory.java │ │ ├── DevIntent.java │ │ ├── DevNumber.java │ │ ├── DevObject.java │ │ ├── DevPage.java │ │ ├── DevSource.java │ │ ├── DevState.java │ │ ├── DevVariable.java │ │ ├── DevVariableExt.java │ │ ├── data │ │ │ ├── DataChanged.java │ │ │ └── DataManager.java │ │ ├── entry │ │ │ ├── DoubleEntry.java │ │ │ ├── FloatEntry.java │ │ │ ├── IntEntry.java │ │ │ ├── LongEntry.java │ │ │ └── StringEntry.java │ │ ├── multiselect │ │ │ ├── DevMultiSelectList.java │ │ │ ├── DevMultiSelectMap.java │ │ │ ├── IMultiSelect.java │ │ │ ├── IMultiSelectEdit.java │ │ │ ├── IMultiSelectToList.java │ │ │ └── IMultiSelectToMap.java │ │ ├── number │ │ │ ├── INumberListener.java │ │ │ └── INumberOperate.java │ │ └── state │ │ │ ├── CommonState.java │ │ │ └── RequestState.java │ │ ├── callback │ │ ├── BaseCallback.java │ │ ├── DevCallback.java │ │ ├── DevClickCallback.java │ │ ├── DevDialogCallback.java │ │ ├── DevItemClickCallback.java │ │ └── DevResultCallback.java │ │ ├── engine │ │ ├── DevEngineAssist.java │ │ ├── analytics │ │ │ ├── DevAnalyticsEngine.java │ │ │ └── IAnalyticsEngine.java │ │ ├── barcode │ │ │ ├── DevBarCodeEngine.java │ │ │ ├── IBarCodeEngine.java │ │ │ └── listener │ │ │ │ ├── BarCodeDecodeCallback.java │ │ │ │ └── BarCodeEncodeCallback.java │ │ ├── cache │ │ │ ├── DevCacheEngine.java │ │ │ └── ICacheEngine.java │ │ ├── compress │ │ │ ├── DevCompressEngine.java │ │ │ ├── ICompressEngine.java │ │ │ └── listener │ │ │ │ ├── CompressFilter.java │ │ │ │ ├── OnCompressListener.java │ │ │ │ └── OnRenameListener.java │ │ ├── image │ │ │ ├── DevImageEngine.java │ │ │ ├── IImageEngine.java │ │ │ └── listener │ │ │ │ ├── BitmapListener.java │ │ │ │ ├── ConvertStorage.java │ │ │ │ ├── DrawableListener.java │ │ │ │ ├── LoadListener.java │ │ │ │ └── OnConvertListener.java │ │ ├── json │ │ │ ├── DevJSONEngine.java │ │ │ └── IJSONEngine.java │ │ ├── keyvalue │ │ │ ├── DevKeyValueEngine.java │ │ │ └── IKeyValueEngine.java │ │ ├── log │ │ │ ├── DevLogEngine.java │ │ │ └── ILogEngine.java │ │ ├── media │ │ │ ├── DevMediaEngine.java │ │ │ └── IMediaEngine.java │ │ ├── permission │ │ │ ├── DevPermissionEngine.java │ │ │ └── IPermissionEngine.java │ │ ├── push │ │ │ ├── DevPushEngine.java │ │ │ └── IPushEngine.java │ │ ├── share │ │ │ ├── DevShareEngine.java │ │ │ ├── IShareEngine.java │ │ │ └── listener │ │ │ │ └── ShareListener.java │ │ ├── storage │ │ │ ├── DevStorageEngine.java │ │ │ ├── IStorageEngine.java │ │ │ └── listener │ │ │ │ └── OnInsertListener.java │ │ └── toast │ │ │ ├── DevToastEngine.java │ │ │ └── IToastEngine.java │ │ └── function │ │ └── DevFunction.java ├── DevBase │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── dev │ │ │ └── base │ │ │ ├── DevBase.kt │ │ │ ├── able │ │ │ ├── IDevBase.kt │ │ │ ├── IDevBaseConfig.kt │ │ │ ├── IDevBaseContent.kt │ │ │ ├── IDevBaseLayout.kt │ │ │ ├── IDevBaseMethod.kt │ │ │ ├── IDevBaseUIOperation.kt │ │ │ └── IDevBaseViewBinding.kt │ │ │ ├── activity │ │ │ ├── AbstractDevBaseActivity.kt │ │ │ └── DevBaseActivity.kt │ │ │ ├── adapter │ │ │ └── DevBaseViewBindingVH.kt │ │ │ ├── expand │ │ │ ├── content │ │ │ │ ├── DevBaseContentActivity.kt │ │ │ │ ├── DevBaseContentFragment.kt │ │ │ │ ├── DevBaseContentMVPActivity.kt │ │ │ │ ├── DevBaseContentMVPFragment.kt │ │ │ │ ├── DevBaseContentMVPViewBindingActivity.kt │ │ │ │ ├── DevBaseContentMVPViewBindingFragment.kt │ │ │ │ ├── DevBaseContentViewBindingActivity.kt │ │ │ │ └── DevBaseContentViewBindingFragment.kt │ │ │ ├── mvp │ │ │ │ ├── DevBaseMVPActivity.kt │ │ │ │ ├── DevBaseMVPFragment.kt │ │ │ │ ├── DevBaseMVPViewBindingActivity.kt │ │ │ │ ├── DevBaseMVPViewBindingFragment.kt │ │ │ │ └── MVP.kt │ │ │ └── viewbinding │ │ │ │ ├── DevBaseViewBindingActivity.kt │ │ │ │ └── DevBaseViewBindingFragment.kt │ │ │ ├── fragment │ │ │ ├── AbstractDevBaseFragment.kt │ │ │ └── DevBaseFragment.kt │ │ │ └── utils │ │ │ ├── ViewBindingUtils.kt │ │ │ └── assist │ │ │ ├── DevBaseAssist.kt │ │ │ ├── DevBaseContentAssist.kt │ │ │ └── DevBaseViewBindingAssist.kt │ │ └── res │ │ └── layout │ │ └── base_content_view.xml ├── DevBaseMVVM │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── dev │ │ └── base │ │ ├── DevBaseMVVM.kt │ │ ├── able │ │ ├── IDevBaseViewDataBinding.kt │ │ └── IDevBaseViewModel.kt │ │ ├── adapter │ │ └── DevBaseViewDataBindingVH.kt │ │ ├── expand │ │ ├── content │ │ │ ├── DevBaseContentMVVMActivity.kt │ │ │ ├── DevBaseContentMVVMFragment.kt │ │ │ ├── DevBaseContentViewDataBindingActivity.kt │ │ │ ├── DevBaseContentViewDataBindingFragment.kt │ │ │ ├── DevBaseContentViewModelActivity.kt │ │ │ └── DevBaseContentViewModelFragment.kt │ │ ├── mvvm │ │ │ ├── DevBaseMVVMActivity.kt │ │ │ ├── DevBaseMVVMFragment.kt │ │ │ └── MVVM.kt │ │ ├── viewdata │ │ │ ├── DevBaseViewDataBindingActivity.kt │ │ │ └── DevBaseViewDataBindingFragment.kt │ │ └── viewmodel │ │ │ ├── DevBaseViewModelActivity.kt │ │ │ └── DevBaseViewModelFragment.kt │ │ └── utils │ │ ├── ViewModelUtils.kt │ │ └── assist │ │ └── DevBaseViewModelAssist.kt ├── DevDeprecated │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── dev │ │ │ ├── DevDeprecated.java │ │ │ └── utils │ │ │ └── app │ │ │ ├── activity_result │ │ │ └── DefaultActivityResult.java │ │ │ ├── camera │ │ │ └── camera1 │ │ │ │ ├── AutoFocusAssist.java │ │ │ │ ├── CameraAssist.java │ │ │ │ ├── CameraSizeAssist.java │ │ │ │ └── CameraUtils.java │ │ │ ├── image │ │ │ └── ImageConvertUtils.java │ │ │ ├── permission │ │ │ └── PermissionUtils.java │ │ │ ├── toast │ │ │ ├── ToastTintUtils.java │ │ │ ├── ToastUtils.java │ │ │ └── toaster │ │ │ │ ├── DefaultToastStyle.java │ │ │ │ ├── DevToast.java │ │ │ │ ├── IToast.java │ │ │ │ ├── IToastImpl.java │ │ │ │ └── ToastFactory.java │ │ │ └── wifi │ │ │ ├── WifiHotUtils.java │ │ │ ├── WifiUtils.java │ │ │ └── WifiVo.java │ │ └── res │ │ ├── anim │ │ ├── dev_fade_in.xml │ │ ├── dev_fade_out.xml │ │ ├── dev_magnify_fade_in.xml │ │ ├── dev_magnify_fade_out.xml │ │ ├── dev_magnify_left_top_in.xml │ │ ├── dev_magnify_right_top_in.xml │ │ ├── dev_push_down_in.xml │ │ ├── dev_push_down_out.xml │ │ ├── dev_push_left_in.xml │ │ ├── dev_push_left_out.xml │ │ ├── dev_push_right_in.xml │ │ ├── dev_push_right_out.xml │ │ ├── dev_push_up_in.xml │ │ ├── dev_push_up_out.xml │ │ ├── dev_rotate_fade_in.xml │ │ ├── dev_rotate_fade_out.xml │ │ ├── dev_shrink_fade_in.xml │ │ ├── dev_shrink_fade_out.xml │ │ ├── dev_shrink_left_bottom_in.xml │ │ └── dev_shrink_right_bottom_in.xml │ │ ├── drawable-hdpi │ │ ├── dev_toast_frame.9.png │ │ ├── dev_toast_icon_error_white.png │ │ ├── dev_toast_icon_info_white.png │ │ ├── dev_toast_icon_success_white.png │ │ └── dev_toast_icon_warning_white.png │ │ ├── drawable-xhdpi │ │ ├── dev_toast_frame.9.png │ │ ├── dev_toast_icon_error_white.png │ │ ├── dev_toast_icon_info_white.png │ │ ├── dev_toast_icon_success_white.png │ │ └── dev_toast_icon_warning_white.png │ │ ├── drawable │ │ └── dialog_transparent.9.png │ │ ├── layout │ │ └── dev_toast_layout.xml │ │ └── values │ │ ├── styles.xml │ │ └── unified.xml ├── DevEngine │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── dev │ │ ├── engine │ │ ├── DevEngine.kt │ │ ├── barcode │ │ │ ├── BarCodeConfig.kt │ │ │ ├── BarCodeData.kt │ │ │ ├── BarCodeResult.kt │ │ │ └── ZXingEngineImpl.kt │ │ ├── cache │ │ │ ├── CacheConfig.kt │ │ │ ├── DataItem.kt │ │ │ └── engine_dev_cache.kt │ │ ├── compress │ │ │ ├── CompressConfig.kt │ │ │ ├── LubanUtils.kt │ │ │ └── engine_luban.kt │ │ ├── image │ │ │ ├── ImageConfig.kt │ │ │ └── engine_glide.kt │ │ ├── json │ │ │ ├── FastjsonUtils.kt │ │ │ ├── GsonUtils.kt │ │ │ ├── JSONConfig.kt │ │ │ ├── engine_fastjson.kt │ │ │ └── engine_gson.kt │ │ ├── keyvalue │ │ │ ├── MMKVUtils.kt │ │ │ ├── engine_mmkv.kt │ │ │ └── engine_sp.kt │ │ ├── log │ │ │ └── engine_dev_logger.kt │ │ ├── media │ │ │ ├── MediaConfig.kt │ │ │ ├── MediaData.kt │ │ │ └── engine_picture_selector.kt │ │ ├── permission │ │ │ └── engine_xxpermissions.kt │ │ ├── storage │ │ │ ├── StorageItem.kt │ │ │ ├── StorageResult.kt │ │ │ ├── StorageType.kt │ │ │ └── engine_dev_media_store.kt │ │ └── toast │ │ │ └── engine_toaster.kt │ │ └── expand │ │ └── engine │ │ ├── analytics │ │ └── analytics.kt │ │ ├── barcode │ │ └── barcode.kt │ │ ├── cache │ │ └── cache.kt │ │ ├── compress │ │ └── compress.kt │ │ ├── image │ │ └── image.kt │ │ ├── json │ │ └── json.kt │ │ ├── keyvalue │ │ └── key_value.kt │ │ ├── log │ │ └── log.kt │ │ ├── media │ │ └── media.kt │ │ ├── permission │ │ └── permission.kt │ │ ├── push │ │ └── push.kt │ │ ├── share │ │ └── share.kt │ │ ├── storage │ │ └── storage.kt │ │ └── toast │ │ └── toast.kt ├── DevJava │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── project.properties │ └── src │ │ └── main │ │ └── java │ │ └── dev │ │ └── utils │ │ ├── DevFinal.java │ │ ├── JCLogUtils.java │ │ └── common │ │ ├── ArrayUtils.java │ │ ├── BigDecimalUtils.java │ │ ├── CalendarUtils.java │ │ ├── ChineseUtils.java │ │ ├── ClassUtils.java │ │ ├── CloneUtils.java │ │ ├── CloseUtils.java │ │ ├── CollectionUtils.java │ │ ├── ColorUtils.java │ │ ├── ConvertUtils.java │ │ ├── CoordinateUtils.java │ │ ├── DateUtils.java │ │ ├── DevCommonUtils.java │ │ ├── EncodeUtils.java │ │ ├── FieldUtils.java │ │ ├── FileIOUtils.java │ │ ├── FileUtils.java │ │ ├── ForUtils.java │ │ ├── FormatUtils.java │ │ ├── HtmlUtils.java │ │ ├── HttpParamsUtils.java │ │ ├── HttpURLConnectionUtils.java │ │ ├── MapUtils.java │ │ ├── NumberUtils.java │ │ ├── ObjectUtils.java │ │ ├── RandomUtils.java │ │ ├── Reflect2Utils.java │ │ ├── ReflectUtils.java │ │ ├── ScaleUtils.java │ │ ├── StreamUtils.java │ │ ├── StringUtils.java │ │ ├── ThrowableUtils.java │ │ ├── TypeUtils.java │ │ ├── ZipUtils.java │ │ ├── able │ │ ├── Bindingable.java │ │ ├── Byable.java │ │ ├── Calculateable.java │ │ ├── Callable.java │ │ ├── Cloneable.java │ │ ├── Closeable.java │ │ ├── Commandable.java │ │ ├── Consumerable.java │ │ ├── Convertable.java │ │ ├── Copyable.java │ │ ├── Correctable.java │ │ ├── Decodeable.java │ │ ├── Decryptable.java │ │ ├── Editorable.java │ │ ├── Encodeable.java │ │ ├── Encryptable.java │ │ ├── Errorable.java │ │ ├── Filterable.java │ │ ├── Findable.java │ │ ├── Flowable.java │ │ ├── Functionable.java │ │ ├── Getable.java │ │ ├── IOable.java │ │ ├── Inputable.java │ │ ├── Interceptable.java │ │ ├── Methodable.java │ │ ├── Modifyable.java │ │ ├── Notifyable.java │ │ ├── Ofable.java │ │ ├── Operatorable.java │ │ ├── Outputable.java │ │ ├── Parseable.java │ │ ├── Pasteable.java │ │ ├── Queryable.java │ │ ├── Readable.java │ │ ├── Refreshable.java │ │ ├── Replaceable.java │ │ ├── Routerable.java │ │ ├── Searchable.java │ │ ├── Sendable.java │ │ ├── Sortable.java │ │ ├── Splitable.java │ │ ├── Supplierable.java │ │ ├── Taskable.java │ │ ├── Threadable.java │ │ ├── Toable.java │ │ ├── UnBinderable.java │ │ └── Writeable.java │ │ ├── assist │ │ ├── Averager.java │ │ ├── FlagsValue.java │ │ ├── KeyValueAssist.java │ │ ├── TimeAverager.java │ │ ├── TimeCounter.java │ │ ├── TimeKeeper.java │ │ ├── WeakReferenceAssist.java │ │ ├── record │ │ │ ├── FileRecordUtils.java │ │ │ ├── RecordConfig.java │ │ │ └── RecordInsert.java │ │ ├── search │ │ │ ├── FileBreadthFirstSearchUtils.java │ │ │ └── FileDepthFirstSearchUtils.java │ │ └── url │ │ │ ├── DevJavaUrlParser.java │ │ │ └── UrlExtras.java │ │ ├── cipher │ │ ├── Base64.java │ │ ├── Base64Cipher.java │ │ ├── Cipher.java │ │ ├── CipherUtils.java │ │ ├── Decrypt.java │ │ └── Encrypt.java │ │ ├── comparator │ │ ├── ComparatorUtils.java │ │ └── sort │ │ │ ├── DateSort.java │ │ │ ├── DateSortAsc.java │ │ │ ├── DateSortDesc.java │ │ │ ├── DoubleSort.java │ │ │ ├── DoubleSortAsc.java │ │ │ ├── DoubleSortDesc.java │ │ │ ├── FileLastModifiedSortAsc.java │ │ │ ├── FileLastModifiedSortDesc.java │ │ │ ├── FileLengthSortAsc.java │ │ │ ├── FileLengthSortDesc.java │ │ │ ├── FileNameSortAsc.java │ │ │ ├── FileNameSortDesc.java │ │ │ ├── FileSortAsc.java │ │ │ ├── FileSortDesc.java │ │ │ ├── FloatSort.java │ │ │ ├── FloatSortAsc.java │ │ │ ├── FloatSortDesc.java │ │ │ ├── IntSort.java │ │ │ ├── IntSortAsc.java │ │ │ ├── IntSortDesc.java │ │ │ ├── LongSort.java │ │ │ ├── LongSortAsc.java │ │ │ ├── LongSortDesc.java │ │ │ ├── StringSort.java │ │ │ ├── StringSortAsc.java │ │ │ ├── StringSortDesc.java │ │ │ ├── StringSortWindowsSimple.java │ │ │ ├── StringSortWindowsSimple2.java │ │ │ ├── WindowsExplorerFileSimpleComparator.java │ │ │ ├── WindowsExplorerFileSimpleComparator2.java │ │ │ ├── WindowsExplorerStringSimpleComparator.java │ │ │ └── WindowsExplorerStringSimpleComparator2.java │ │ ├── encrypt │ │ ├── AESUtils.java │ │ ├── CRCUtils.java │ │ ├── DESUtils.java │ │ ├── EncryptUtils.java │ │ ├── EscapeUtils.java │ │ ├── MD5Utils.java │ │ ├── SHAUtils.java │ │ ├── TripleDESUtils.java │ │ └── XorUtils.java │ │ ├── file │ │ ├── FilePartAssist.java │ │ ├── FilePartItem.java │ │ └── FilePartUtils.java │ │ ├── format │ │ ├── ArgsFormatter.java │ │ └── UnitSpanFormatter.java │ │ ├── random │ │ └── AliasMethod.java │ │ ├── thread │ │ ├── DevThreadManager.java │ │ └── DevThreadPool.java │ │ └── validator │ │ ├── BankCheckUtils.java │ │ ├── IDCardUtils.java │ │ ├── ValiToPhoneUtils.java │ │ └── ValidatorUtils.java ├── DevSimple │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── dev │ │ │ ├── agile │ │ │ ├── app │ │ │ │ ├── AppChannel.kt │ │ │ │ └── AppExecutors.kt │ │ │ ├── assist │ │ │ │ └── WebViewAssist.kt │ │ │ ├── channel │ │ │ │ └── AbstractChannelFlavors.kt │ │ │ ├── engine │ │ │ │ └── debug │ │ │ │ │ ├── DevDebugEngine.kt │ │ │ │ │ └── IDebugEngine.kt │ │ │ ├── intent │ │ │ │ └── BaseIntent.kt │ │ │ ├── interfaces │ │ │ │ └── FunctionFlowCall.kt │ │ │ ├── livedata │ │ │ │ ├── AbsentLiveData.kt │ │ │ │ └── AbsentMutableLiveData.kt │ │ │ └── repository │ │ │ │ ├── NetworkBoundResource.kt │ │ │ │ ├── NetworkBoundScopeResource.kt │ │ │ │ ├── Resource.kt │ │ │ │ ├── Response.kt │ │ │ │ └── Status.kt │ │ │ ├── mvvm │ │ │ ├── base │ │ │ │ ├── Config.kt │ │ │ │ ├── adapter │ │ │ │ │ ├── BaseDataAdapter.kt │ │ │ │ │ ├── BaseDataAdapterExt.kt │ │ │ │ │ ├── BaseDataAdapterExt2.kt │ │ │ │ │ └── item │ │ │ │ │ │ ├── ItemBinding.kt │ │ │ │ │ │ └── ItemLifecycle.kt │ │ │ │ ├── attribute │ │ │ │ │ ├── Margins.kt │ │ │ │ │ └── Paddings.kt │ │ │ │ └── viewmodel │ │ │ │ │ └── LifecycleViewModel.kt │ │ │ ├── binding │ │ │ │ ├── animation │ │ │ │ │ └── Animation.kt │ │ │ │ ├── listener │ │ │ │ │ └── Listener.kt │ │ │ │ ├── view │ │ │ │ │ ├── ConstraintLayout.kt │ │ │ │ │ ├── ImageView.kt │ │ │ │ │ ├── TextView.kt │ │ │ │ │ ├── View.kt │ │ │ │ │ ├── ViewMargin.kt │ │ │ │ │ └── ViewPadding.kt │ │ │ │ └── widget │ │ │ │ │ └── LoadProgressBar.kt │ │ │ ├── command │ │ │ │ ├── BindingClick.kt │ │ │ │ ├── BindingConsumer.kt │ │ │ │ └── BindingGet.kt │ │ │ └── utils │ │ │ │ ├── Price.kt │ │ │ │ ├── Resource.kt │ │ │ │ ├── Source.kt │ │ │ │ ├── hi │ │ │ │ ├── HiInlineOnly.kt │ │ │ │ └── hiif │ │ │ │ │ ├── HiIf.kt │ │ │ │ │ ├── HiIfArray.kt │ │ │ │ │ ├── HiIfBoolean.kt │ │ │ │ │ ├── HiIfCollections.kt │ │ │ │ │ └── HiIfString.kt │ │ │ │ ├── image │ │ │ │ ├── AppAutoImageConfig.kt │ │ │ │ └── AppImageConfig.kt │ │ │ │ └── size │ │ │ │ ├── AppAutoSize.kt │ │ │ │ └── AppSize.kt │ │ │ └── simple │ │ │ ├── DevSimple.kt │ │ │ └── app │ │ │ ├── BaseAppActivity.kt │ │ │ ├── BaseAppFragment.kt │ │ │ ├── BaseAppViewModel.kt │ │ │ ├── base │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseFragment.kt │ │ │ ├── VMType.kt │ │ │ ├── interfaces │ │ │ │ └── BindingLayoutView.kt │ │ │ ├── lifecycle │ │ │ │ ├── ILifecycle.kt │ │ │ │ └── LifecycleManager.kt │ │ │ └── simple │ │ │ │ ├── ISimpleAgile.kt │ │ │ │ ├── SimpleAgileFactory.kt │ │ │ │ └── factory │ │ │ │ ├── BaseSimpleAgile.kt │ │ │ │ └── SimpleAgileIMPL.kt │ │ │ ├── controller │ │ │ ├── BaseKeyEventController.kt │ │ │ ├── BaseUIController.kt │ │ │ ├── BaseVMController.kt │ │ │ ├── interfaces │ │ │ │ ├── IController.kt │ │ │ │ └── IUIController.kt │ │ │ ├── loading │ │ │ │ ├── BaseLoadingController.kt │ │ │ │ ├── BaseLoadingSkeletonController.kt │ │ │ │ └── BaseViewAssistController.kt │ │ │ ├── ui │ │ │ │ ├── skeleton │ │ │ │ │ ├── PageLoadingSkeletonFactory.kt │ │ │ │ │ └── ViewAssistFactory.kt │ │ │ │ └── theme │ │ │ │ │ ├── UITheme.kt │ │ │ │ │ ├── UIThemeExt.kt │ │ │ │ │ ├── UIThemeKey.kt │ │ │ │ │ └── UIThemeStandard.kt │ │ │ └── viewmodel │ │ │ │ ├── ControllerViewModel.kt │ │ │ │ └── UIViewModel.kt │ │ │ └── extension │ │ │ ├── loading │ │ │ ├── BaseLoadingActivity.kt │ │ │ ├── BaseLoadingFragment.kt │ │ │ ├── BaseLoadingSkeletonActivity.kt │ │ │ └── BaseLoadingSkeletonFragment.kt │ │ │ ├── mvvm │ │ │ ├── BaseMVVMActivity.kt │ │ │ └── BaseMVVMFragment.kt │ │ │ └── theme │ │ │ ├── BaseUIThemeActivity.kt │ │ │ └── BaseUIThemeFragment.kt │ │ └── res │ │ └── values │ │ └── tools.xml ├── DevWidget │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ ├── project.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── dev │ │ │ └── widget │ │ │ ├── DevWidget.java │ │ │ ├── adjust │ │ │ ├── AdjustHeightGridView.java │ │ │ ├── AdjustHeightListView.java │ │ │ ├── AdjustHeightRecyclerView.java │ │ │ └── AdjustHeightWebView.java │ │ │ ├── assist │ │ │ └── ViewAssist.java │ │ │ ├── custom │ │ │ ├── CustomGallery.java │ │ │ ├── CustomHorizontalScrollView.java │ │ │ ├── CustomNestedScrollView.java │ │ │ ├── CustomRecyclerView.java │ │ │ ├── CustomScrollView.java │ │ │ ├── CustomViewPager.java │ │ │ └── CustomWebView.java │ │ │ ├── decoration │ │ │ ├── BaseColorGridItemDecoration.java │ │ │ ├── BaseColorItemDecoration.java │ │ │ ├── grid │ │ │ │ ├── GridColumnColorItemDecoration.java │ │ │ │ └── GridRowColorItemDecoration.java │ │ │ └── linear │ │ │ │ ├── FirstLinearColorItemDecoration.java │ │ │ │ ├── LastLinearColorItemDecoration.java │ │ │ │ └── LinearColorItemDecoration.java │ │ │ ├── function │ │ │ ├── LimitLayout.java │ │ │ ├── LineTextView.java │ │ │ ├── RightIconEditText.java │ │ │ ├── SignView.java │ │ │ └── StateLayout.java │ │ │ ├── ui │ │ │ ├── CornerLabelView.java │ │ │ ├── FlipCardView.java │ │ │ ├── FlowLikeView.java │ │ │ ├── LoadProgressBar.java │ │ │ ├── ScanShapeView.java │ │ │ ├── WaveView.java │ │ │ ├── WrapView.java │ │ │ ├── radius │ │ │ │ ├── IRadiusMethod.java │ │ │ │ ├── RadiusButton.java │ │ │ │ ├── RadiusConstraintLayout.java │ │ │ │ ├── RadiusImageView.java │ │ │ │ ├── RadiusLayout.java │ │ │ │ ├── RadiusLinearLayout.java │ │ │ │ ├── RadiusRelativeLayout.java │ │ │ │ └── RadiusTextView.java │ │ │ ├── resize │ │ │ │ ├── ResizableImageView.java │ │ │ │ └── ResizableRadiusImageView.java │ │ │ └── round │ │ │ │ ├── RoundButton.java │ │ │ │ ├── RoundConstraintLayout.java │ │ │ │ ├── RoundDrawable.java │ │ │ │ ├── RoundFrameLayout.java │ │ │ │ ├── RoundImageView.java │ │ │ │ ├── RoundLinearLayout.java │ │ │ │ ├── RoundRelativeLayout.java │ │ │ │ └── RoundTextView.java │ │ │ └── utils │ │ │ ├── RadiusAttrs.java │ │ │ ├── WaveHelper.java │ │ │ └── WidgetAttrs.java │ │ └── res │ │ ├── animator │ │ ├── dev_flip_card_in.xml │ │ └── dev_flip_card_out.xml │ │ ├── drawable │ │ └── dev_scan_line.png │ │ └── values │ │ └── attrs.xml ├── Environment │ ├── CHANGELOG.md │ ├── DevEnvironment │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── dev │ │ │ │ └── environment │ │ │ │ ├── AdapterItem.java │ │ │ │ ├── DevEnvironmentActivity.java │ │ │ │ ├── DevEnvironmentUtils.java │ │ │ │ ├── RestartCallback.java │ │ │ │ └── Utils.java │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── dev_environment_back.xml │ │ │ ├── dev_environment_item_selector.xml │ │ │ └── dev_environment_mark.xml │ │ │ ├── layout │ │ │ ├── dev_environment_activity.xml │ │ │ ├── dev_environment_item_environment.xml │ │ │ └── dev_environment_item_module.xml │ │ │ ├── values-zh-rCN │ │ │ └── strings.xml │ │ │ └── values │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── unified.xml │ ├── DevEnvironmentBase │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── dev │ │ │ └── environment │ │ │ ├── annotation │ │ │ ├── Environment.java │ │ │ └── Module.java │ │ │ ├── bean │ │ │ ├── EnvironmentBean.java │ │ │ └── ModuleBean.java │ │ │ ├── listener │ │ │ └── OnEnvironmentChangeListener.java │ │ │ ├── log │ │ │ └── LogUtils.java │ │ │ └── type │ │ │ └── ParameterizedTypeImpl.java │ ├── DevEnvironmentCompiler │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── dev │ │ │ └── environment │ │ │ └── compiler │ │ │ ├── DevEnvironmentCompilerDebug.java │ │ │ └── Utils.java │ ├── DevEnvironmentCompilerRelease │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── dev │ │ │ └── environment │ │ │ └── compiler │ │ │ ├── DevEnvironmentCompilerRelease.java │ │ │ └── Utils.java │ └── README.md ├── HttpCapture │ ├── CHANGELOG.md │ ├── DevHttpCapture │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── dev │ │ │ ├── DevHttpCapture.kt │ │ │ └── capture │ │ │ ├── DataModel.kt │ │ │ ├── Utils.kt │ │ │ ├── interceptor │ │ │ ├── BaseInterceptor.kt │ │ │ ├── CallbackInterceptor.kt │ │ │ ├── SimpleInterceptor.kt │ │ │ └── StorageInterceptor.kt │ │ │ └── interfaces │ │ │ ├── Interface.kt │ │ │ └── InterfaceIMPL.kt │ ├── DevHttpCaptureCompiler │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── dev │ │ │ │ ├── DevHttpCaptureCompiler.kt │ │ │ │ └── capture │ │ │ │ ├── DevHttpCaptureToast.kt │ │ │ │ ├── UrlFunctionGet.kt │ │ │ │ ├── UtilsCompiler.kt │ │ │ │ ├── activity │ │ │ │ ├── DevHttpCaptureFileActivity.kt │ │ │ │ ├── DevHttpCaptureListActivity.kt │ │ │ │ └── DevHttpCaptureMainActivity.kt │ │ │ │ ├── adapter │ │ │ │ ├── AdapterCaptureFile.kt │ │ │ │ ├── AdapterDateModuleList.kt │ │ │ │ ├── AdapterDateModuleListItem.kt │ │ │ │ ├── AdapterMainModule.kt │ │ │ │ └── AdapterMainModuleList.kt │ │ │ │ ├── base │ │ │ │ ├── BaseDevHttpActivity.kt │ │ │ │ └── BaseDevHttpViewHolder.kt │ │ │ │ └── model │ │ │ │ ├── Dialogs.kt │ │ │ │ └── Items.kt │ │ │ └── res │ │ │ ├── drawable-xxhdpi │ │ │ ├── dev_http_capture_icon_refresh.png │ │ │ ├── dev_http_capture_icon_sort_arrow.png │ │ │ └── dev_http_capture_icon_tips.png │ │ │ ├── drawable │ │ │ ├── dev_http_capture_action_round_bg.xml │ │ │ ├── dev_http_capture_adapter_copy_bg.xml │ │ │ ├── dev_http_capture_adapter_item_bg.xml │ │ │ ├── dev_http_capture_back.xml │ │ │ └── dev_http_capture_dialog_bg.xml │ │ │ ├── layout │ │ │ ├── dev_http_capture_capture_file_adapter.xml │ │ │ ├── dev_http_capture_data_type_dialog.xml │ │ │ ├── dev_http_capture_date_module_list_adapter.xml │ │ │ ├── dev_http_capture_date_module_list_item_adapter.xml │ │ │ ├── dev_http_capture_file_activity.xml │ │ │ ├── dev_http_capture_group_type_dialog.xml │ │ │ ├── dev_http_capture_include_list_options_tab.xml │ │ │ ├── dev_http_capture_include_tips.xml │ │ │ ├── dev_http_capture_include_title.xml │ │ │ ├── dev_http_capture_list_activity.xml │ │ │ ├── dev_http_capture_main_activity.xml │ │ │ ├── dev_http_capture_main_module_adapter.xml │ │ │ └── dev_http_capture_main_module_list_adapter.xml │ │ │ ├── values-zh-rCN │ │ │ └── strings.xml │ │ │ └── values │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── unified.xml │ ├── DevHttpCaptureCompilerRelease │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── dev │ │ │ ├── DevHttpCaptureCompiler.kt │ │ │ └── capture │ │ │ └── UrlFunctionGet.kt │ └── README.md ├── HttpRequest │ ├── DevHttpManager │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── dev │ │ │ ├── DevHttpManager.kt │ │ │ └── http │ │ │ ├── manager │ │ │ ├── OkHttpBuilder.kt │ │ │ ├── OnRetrofitResetListener.kt │ │ │ ├── RetrofitBuilder.kt │ │ │ ├── RetrofitManager.kt │ │ │ └── RetrofitOperation.kt │ │ │ └── progress │ │ │ ├── Progress.kt │ │ │ ├── ProgressManager.kt │ │ │ ├── ProgressOperation.kt │ │ │ ├── ProgressRequestBody.kt │ │ │ ├── ProgressResponseBody.kt │ │ │ ├── ProgressUtils.kt │ │ │ └── operation │ │ │ ├── BaseOperation.kt │ │ │ ├── IOperation.kt │ │ │ ├── OperationPlanA.kt │ │ │ └── OperationPlanB.kt │ └── DevRetrofit │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ ├── project.properties │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── dev │ │ ├── DevRetrofit.kt │ │ └── retrofit │ │ ├── model.kt │ │ ├── request.kt │ │ ├── request_coroutines.kt │ │ └── request_coroutines_simple.kt ├── README.md └── publish.md ├── settings.gradle └── sonatype.properties /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | local.properties 4 | bintray.properties 5 | sonatype.properties 6 | .idea 7 | .DS_Store 8 | /build 9 | /captures 10 | .externalNativeBuild 11 | /reports -------------------------------------------------------------------------------- /application/DevEnvironmentUse/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/java/afkt/environment/use/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package afkt.environment.use 2 | 3 | import afkt.environment.use.base.BaseActivity 4 | import afkt.environment.use.databinding.ActivityMainBinding 5 | import androidx.navigation.findNavController 6 | 7 | class MainActivity : BaseActivity( 8 | R.layout.activity_main, BR.viewModel, simple_Agile = { act -> 9 | if (act is MainActivity) { 10 | act.apply { 11 | viewModel.clickCustomEvent.observe(this) { 12 | // 显示【自定义】切换环境【UI、功能】Fragment 13 | findNavController(binding.navContainer.id) 14 | .navigate(R.id.CustomFragment) 15 | } 16 | } 17 | } 18 | } 19 | ) -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/java/afkt/environment/use/MainFragment.kt: -------------------------------------------------------------------------------- 1 | package afkt.environment.use 2 | 3 | import afkt.environment.use.base.BaseFragment 4 | import afkt.environment.use.databinding.FragmentMainBinding 5 | import dev.simple.app.base.FragmentVMType 6 | 7 | class MainFragment : BaseFragment( 8 | R.layout.fragment_main, BR.viewModel, FragmentVMType.ACTIVITY 9 | ) -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/java/afkt/environment/use/base/BaseViewModel.kt: -------------------------------------------------------------------------------- 1 | package afkt.environment.use.base 2 | 3 | import dev.simple.app.BaseAppViewModel 4 | 5 | /** 6 | * detail: Base ViewModel 7 | * @author Ttt 8 | */ 9 | open class BaseViewModel : BaseAppViewModel() -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/res/drawable/launcher_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevEnvironmentUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevEnvironmentUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevEnvironmentUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp -------------------------------------------------------------------------------- /application/DevEnvironmentUse/src/main/res/navigation/app_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 15 | -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/java/afkt/httpcapture/use/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpcapture.use 2 | 3 | import afkt.httpcapture.use.base.BaseActivity 4 | import afkt.httpcapture.use.databinding.ActivityMainBinding 5 | 6 | class MainActivity : BaseActivity( 7 | R.layout.activity_main 8 | ) -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/java/afkt/httpcapture/use/MainFragment.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpcapture.use 2 | 3 | import afkt.httpcapture.use.base.BaseFragment 4 | import afkt.httpcapture.use.databinding.FragmentMainBinding 5 | 6 | class MainFragment : BaseFragment( 7 | R.layout.fragment_main, BR.viewModel 8 | ) -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/java/afkt/httpcapture/use/base/BaseViewModel.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpcapture.use.base 2 | 3 | import dev.simple.app.BaseAppViewModel 4 | 5 | /** 6 | * detail: Base ViewModel 7 | * @author Ttt 8 | */ 9 | open class BaseViewModel : BaseAppViewModel() -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/res/drawable/launcher_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevHttpCaptureUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevHttpCaptureUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevHttpCaptureUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp -------------------------------------------------------------------------------- /application/DevHttpCaptureUse/src/main/res/navigation/app_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | -------------------------------------------------------------------------------- /application/DevHttpManagerUse/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/java/afkt/httpmanager/use/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpmanager.use 2 | 3 | import afkt.httpmanager.use.base.BaseActivity 4 | import afkt.httpmanager.use.databinding.ActivityMainBinding 5 | import androidx.navigation.findNavController 6 | 7 | class MainActivity : BaseActivity( 8 | R.layout.activity_main, BR.viewModel 9 | ) { 10 | override fun initListener() { 11 | super.initListener() 12 | // Fragment Navigate 监听 13 | viewModel.clickNavigateEvent.observe(this) { res -> 14 | findNavController(binding.navContainer.id) 15 | .navigate(res.id) 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/java/afkt/httpmanager/use/MainFragment.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpmanager.use 2 | 3 | import afkt.httpmanager.use.base.BaseFragment 4 | import afkt.httpmanager.use.databinding.FragmentMainBinding 5 | import dev.simple.app.base.FragmentVMType 6 | 7 | class MainFragment : BaseFragment( 8 | R.layout.fragment_main, BR.viewModel, FragmentVMType.ACTIVITY 9 | ) -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/java/afkt/httpmanager/use/base/BaseViewModel.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpmanager.use.base 2 | 3 | import dev.simple.app.BaseAppViewModel 4 | 5 | /** 6 | * detail: Base ViewModel 7 | * @author Ttt 8 | */ 9 | open class BaseViewModel : BaseAppViewModel() -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/java/afkt/httpmanager/use/feature/media/data/api/MediaService.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpmanager.use.feature.media.data.api 2 | 3 | import afkt.httpmanager.use.feature.media.data.model.MovieDetailBean 4 | import afkt.httpmanager.use.feature.media.data.model.PhotoBean 5 | import afkt.httpmanager.use.network.model.AppResponse 6 | import retrofit2.http.GET 7 | 8 | /** 9 | * detail: Media API Service 10 | * @author Ttt 11 | */ 12 | interface MediaService { 13 | 14 | /** 15 | * 获取摄影图片列表 16 | */ 17 | @GET("assets/photos.json") 18 | suspend fun getPhotoList(): AppResponse> 19 | 20 | /** 21 | * 获取电影详情信息 22 | */ 23 | @GET("assets/movie_detail.json") 24 | suspend fun getMovieDetail(): AppResponse 25 | } -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/java/afkt/httpmanager/use/feature/progress/PMRepository.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpmanager.use.feature.progress 2 | 3 | /** 4 | * detail: Progress Manager Request Repository 5 | * @author Ttt 6 | */ 7 | class PMRepository { 8 | 9 | // 日志 TAG 10 | private val TAG = PMRepository::class.java.simpleName 11 | } -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/java/afkt/httpmanager/use/feature/progress/PMViewModel.kt: -------------------------------------------------------------------------------- 1 | package afkt.httpmanager.use.feature.progress 2 | 3 | import afkt.httpmanager.use.base.BaseViewModel 4 | 5 | /** 6 | * detail: Progress Manager ViewModel 7 | * @author Ttt 8 | */ 9 | class PMViewModel( 10 | private val repository: PMRepository = PMRepository() 11 | ) : BaseViewModel() { 12 | 13 | // =========== 14 | // = 点击事件 = 15 | // =========== 16 | 17 | // 获取摄影图片列表 18 | val clickPhotoList: () -> Unit = { 19 | requestPhotoList() 20 | } 21 | 22 | // ========== 23 | // = 请求方法 = 24 | // ========== 25 | 26 | /** 27 | * 获取摄影图片列表 28 | */ 29 | private fun requestPhotoList() { 30 | } 31 | } -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/res/drawable/launcher_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevHttpManagerUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevHttpManagerUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp -------------------------------------------------------------------------------- /application/DevHttpManagerUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevHttpManagerUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp -------------------------------------------------------------------------------- /application/DevRetrofitUse/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /application/DevRetrofitUse/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file(files.build_app_gradle) 2 | 3 | android { 4 | namespace "afkt.retrofit.use" 5 | 6 | defaultConfig { 7 | applicationId "afkt.retrofit.use" 8 | } 9 | } 10 | 11 | // Android lib 依赖配置 12 | apply from: rootProject.file(deps_maven.deps_android) 13 | // DevUtils 项目统一依赖配置 14 | apply from: rootProject.file(deps_maven.prop_dev_utils) 15 | // 第三方 lib 依赖配置 16 | apply from: rootProject.file(deps_maven.deps_other) 17 | 18 | dependencies { 19 | 20 | // ================ 21 | // = Dev 系列开发库 = 22 | // ================ 23 | 24 | // // DevRetrofit - Retrofit + Kotlin Coroutines 封装 25 | // api deps.dev.dev_retrofit 26 | 27 | // DevRetrofit - Retrofit + Kotlin Coroutines 封装 28 | api project(':DevRetrofit') 29 | } -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/assets/error.json: -------------------------------------------------------------------------------- 1 | { 2 | "code" : "E_4001", 3 | "message" : "参数缺失:缺少必填字段[xxx]" 4 | } -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/assets/movie_detail.json: -------------------------------------------------------------------------------- 1 | { 2 | "responseCode" : 0, 3 | "responseMessage" : "获取详情成功", 4 | "response" : { 5 | "id" : 574475, 6 | "backdrop_path" : "/uIpJPDNFoeX0TVml9smPrs9KUVx.jpg", 7 | "overview" : "著名恐怖片系列《死神来了》要拍第六部了。新线影业已聘请《电锯惊魂4/5/6/7》编剧Patrick Melton和Marcus Dunstan为《死神来了6》写剧本。", 8 | "poster_path" : "/ebTm4k4EkHuGzum8xFJqIiQCZFj.jpg", 9 | "release_date" : "2025-05-09", 10 | "status" : "Released", 11 | "title" : "死神来了6", 12 | "video" : false 13 | } 14 | } -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/java/afkt/retrofit/use/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package afkt.retrofit.use 2 | 3 | import afkt.retrofit.use.base.BaseActivity 4 | import afkt.retrofit.use.databinding.ActivityMainBinding 5 | import androidx.navigation.findNavController 6 | 7 | class MainActivity : BaseActivity( 8 | R.layout.activity_main, BR.viewModel 9 | ) { 10 | override fun initListener() { 11 | super.initListener() 12 | // Fragment Navigate 监听 13 | viewModel.clickNavigateEvent.observe(this) { res -> 14 | findNavController(binding.navContainer.id) 15 | .navigate(res.id) 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/java/afkt/retrofit/use/MainFragment.kt: -------------------------------------------------------------------------------- 1 | package afkt.retrofit.use 2 | 3 | import afkt.retrofit.use.base.BaseFragment 4 | import afkt.retrofit.use.databinding.FragmentMainBinding 5 | import dev.simple.app.base.FragmentVMType 6 | 7 | class MainFragment : BaseFragment( 8 | R.layout.fragment_main, BR.viewModel, FragmentVMType.ACTIVITY 9 | ) -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/java/afkt/retrofit/use/base/BaseViewModel.kt: -------------------------------------------------------------------------------- 1 | package afkt.retrofit.use.base 2 | 3 | import dev.simple.app.BaseAppViewModel 4 | 5 | /** 6 | * detail: Base ViewModel 7 | * @author Ttt 8 | */ 9 | open class BaseViewModel : BaseAppViewModel() -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/res/drawable/launcher_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevRetrofitUse/src/main/res/mipmap-xxhdpi/icon_launcher.webp -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevRetrofitUse/src/main/res/mipmap-xxhdpi/icon_launcher_round.webp -------------------------------------------------------------------------------- /application/DevRetrofitUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevRetrofitUse/src/main/res/mipmap-xxhdpi/launcher_window_bg.webp -------------------------------------------------------------------------------- /application/DevUtilsApp/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /schemas -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/assets/filter/August.acv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/assets/filter/August.acv -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/assets/filter/Darker.acv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/assets/filter/Darker.acv -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/assets/filter/Dream.acv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/assets/filter/Dream.acv -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/assets/filter/Fornature.acv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/assets/filter/Fornature.acv -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/assets/filter/Greens.acv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/assets/filter/Greens.acv -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/assets/filter/Miami.acv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/assets/filter/Miami.acv -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/java/afkt/project/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package afkt.project 2 | 3 | import afkt.project.base.project.BaseProjectActivity 4 | import afkt.project.base.project.BaseProjectViewModel 5 | import afkt.project.base.project.bindAdapter 6 | import afkt.project.data_model.button.ButtonList 7 | import afkt.project.databinding.ActivityMainBinding 8 | 9 | class MainActivity : BaseProjectActivity( 10 | R.layout.activity_main, simple_Agile = { 11 | if (it is MainActivity) { 12 | it.binding.vidInclude.vidRv.bindAdapter( 13 | ButtonList.mainButtonValues 14 | ) 15 | } 16 | }, simple_UITheme = { 17 | it.setAddTitleBar(false) 18 | } 19 | ) -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/java/afkt/project/base/project/BaseProjectViewModel.kt: -------------------------------------------------------------------------------- 1 | package afkt.project.base.project 2 | 3 | import dev.simple.app.BaseAppViewModel 4 | 5 | open class BaseProjectViewModel : BaseAppViewModel() -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/java/afkt/project/feature/ui_effect/common/TabItem.kt: -------------------------------------------------------------------------------- 1 | package afkt.project.feature.ui_effect.common 2 | 3 | /** 4 | * detail: Tab 模型类 5 | * @author Ttt 6 | */ 7 | class TabItem( 8 | // 标题 9 | val title: String, 10 | // 类型 11 | val type: Int 12 | ) -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/java/afkt/project/feature/ui_effect/gpu/bean/ACVFileBean.kt: -------------------------------------------------------------------------------- 1 | package afkt.project.feature.ui_effect.gpu.bean 2 | 3 | /** 4 | * detail: ACV 文件实体类 5 | * @author Ttt 6 | */ 7 | class ACVFileBean( 8 | // ACV 名 9 | val acvName: String, 10 | // 文件地址 11 | val acvPath: String 12 | ) -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/java/afkt/project/feature/ui_effect/palette/PaletteViewModel.kt: -------------------------------------------------------------------------------- 1 | package afkt.project.feature.ui_effect.palette 2 | 3 | import afkt.project.base.project.BaseProjectViewModel 4 | import androidx.lifecycle.MutableLiveData 5 | import androidx.palette.graphics.Palette 6 | 7 | class PaletteViewModel : BaseProjectViewModel() { 8 | 9 | val itemPosition = MutableLiveData() 10 | 11 | val paletteColor = MutableLiveData() 12 | 13 | fun postItemPosition(value: Int) { 14 | itemPosition.value = value 15 | } 16 | 17 | fun postPalette(value: Palette) { 18 | paletteColor.value = value 19 | } 20 | } -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/java/afkt/project/feature/ui_effect/text_view/TextViewActivity.kt: -------------------------------------------------------------------------------- 1 | package afkt.project.feature.ui_effect.text_view 2 | 3 | import afkt.project.R 4 | import afkt.project.base.project.BaseProjectActivity 5 | import afkt.project.base.project.BaseProjectViewModel 6 | import afkt.project.data_model.button.RouterPath 7 | import afkt.project.databinding.ActivityTextviewBinding 8 | import com.therouter.router.Route 9 | 10 | /** 11 | * detail: 两个 TextView 显示效果 12 | * @author Ttt 13 | */ 14 | @Route(path = RouterPath.UI_EFFECT.TextViewActivity_PATH) 15 | class TextViewActivity : BaseProjectActivity( 16 | R.layout.activity_textview 17 | ) -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-base/layout/base_view_button.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-base/layout/base_view_textview.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-function/layout/activity_webview.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-function/layout/layout_floating.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_add_black.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_add_black.webp -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_add_grey.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_add_grey.webp -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_close.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_close.webp -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_reduce_black.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_reduce_black.webp -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_reduce_grey.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-sku/drawable-xxhdpi/sku_icon_reduce_grey.webp -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable/sku_edit_cursor_color_style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable/sku_gradient_92ba37_bfe076_corners10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable/sku_selector_add_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable/sku_selector_reduce_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable/sku_shape_f6f6f6_corners6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable/sku_shape_stroked_92ba37_corners6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/drawable/sku_shape_stroked_f6f6f6_corners6_dash.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 13 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-sku/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #f6f6f6 4 | #f5f9f2 5 | #bfe076 6 | #92ba37 7 | #c7c7c7 8 | #bdb9b8 9 | #999999 10 | #282828 11 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_annulus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_annulus.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_electric_fan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_electric_fan.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_electric_leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_electric_leaf.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_electric_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_electric_loading.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_empty.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_error.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_flashlight_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_flashlight_off.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_flashlight_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_flashlight_on.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_hexagon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_hexagon.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_image.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_1.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_2.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_3.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_4.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_live_brow_5.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_refresh.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/icon_square.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/img_commodity.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui-widget/drawable-xxhdpi/img_commodity.jpg -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/drawable/shape_flashlight_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/activity_view_assist.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/adapter_grid_horizontal_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/adapter_grid_vertical_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/adapter_linear_horizontal_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/adapter_linear_vertical_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/adapter_recycler_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 18 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/view_assist_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/view_assist_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/view_assist_loading2.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/view_assist_loading3.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/view_assist_recy_failed.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/view_assist_recy_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui-widget/layout/view_pager_item_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/color/selector_tab_text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/bg_wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/bg_wallpaper.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/bg_wallpaper2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/bg_wallpaper2.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/btn_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/btn_normal.9.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/btn_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/btn_pressed.9.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_selected.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_shop_cart_add_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_shop_cart_add_red.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_shop_cart_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_shop_cart_white.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_star_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_star_selected.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_star_unselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_star_unselected.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_unselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/drawable-xxhdpi/icon_unselected.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_bg_black_top_r10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_bg_blue_top_r10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_bg_white_r10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_multiselect_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_tab_left_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_tab_left_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_tab_left_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_tab_right_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_tab_right_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/drawable/shape_tab_right_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/activity_bottom_sheet_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/activity_capture_picture_grid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/activity_capture_picture_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/activity_capture_picture_recy.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/activity_capture_picture_web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/activity_palette.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/activity_text_calc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/adapter_concat_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/adapter_concat_banner_image.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/adapter_concat_classify.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/adapter_concat_header_footer.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/adapter_concat_shapeable_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/adapter_flexbox_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/include_bottom_shop_cart_floating_anim_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/layout/include_chip.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/menu/menu_pager.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 15 | 16 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/raw/wallpaper_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/raw/wallpaper_1.jpg -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/raw/wallpaper_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/raw/wallpaper_2.jpg -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/raw/wallpaper_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/raw/wallpaper_3.jpg -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/raw/wallpaper_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/raw/wallpaper_4.jpg -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/raw/wallpaper_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res-ui/raw/wallpaper_5.jpg -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res-ui/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ff2e42 4 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable-xxhdpi/icon_tips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res/drawable-xxhdpi/icon_tips.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable/shape_border_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable/shape_layer_triangle_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable/shape_layer_triangle_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable/shape_layer_triangle_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable/shape_layer_triangle_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable/shape_oval_annular.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/drawable/touch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/mipmap-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res/mipmap-xxxhdpi/icon.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/mipmap-xxxhdpi/icon_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res/mipmap-xxxhdpi/icon_launcher.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/mipmap-xxxhdpi/icon_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res/mipmap-xxxhdpi/icon_launcher_round.png -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/raw/dev_beep.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/application/DevUtilsApp/src/main/res/raw/dev_beep.ogg -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/values-zh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DevUtils 4 | 开发项目 5 | 复制成功 6 | 无障碍监听 7 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3f51b5 4 | #303f9f 5 | #ff4081 6 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DevUtils 4 | DevUtils 5 | copy suc 6 | accessibility description 7 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/values/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 3 4 | -------------------------------------------------------------------------------- /application/DevUtilsApp/src/main/res/xml/accessibility_config.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /application/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | 该目录主要存储可运行 Android 应用项目 4 | 5 | ## 目录结构 6 | 7 | ``` 8 | - application | 根目录 9 | - DevUtilsApp | DevUtils 代码演示应用 10 | - DevEnvironmentUse | DevEnvironment - Android 环境配置切换库【使用示例】 11 | - DevHttpCaptureUse | DevHttpCapture - OkHttp 抓包工具库【使用示例】 12 | - DevHttpManagerUse | DevHttpManager - OkHttp 管理库【使用示例】 13 | - DevRetrofitUse | DevRetrofit - Retrofit + Kotlin Coroutines 封装【使用示例】 14 | ``` -------------------------------------------------------------------------------- /art/module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/art/module.png -------------------------------------------------------------------------------- /bintray.properties: -------------------------------------------------------------------------------- 1 | #bintray 2 | bintray.user=afkt 3 | bintray.apikey= 4 | 5 | #developer 6 | developer.id=afkt 7 | developer.name=afkt 8 | developer.email=jtongttt@gmail.com -------------------------------------------------------------------------------- /dev_utils.properties: -------------------------------------------------------------------------------- 1 | # DevUtils Maven dependencies 2 | is_maven_deps=false -------------------------------------------------------------------------------- /file/deps/deps_profiler.gradle: -------------------------------------------------------------------------------- 1 | // 性能检测相关 lib 依赖配置 2 | dependencies { 3 | 4 | // ==================== 5 | // = 性能检测、排查相关库 = 6 | // ==================== 7 | 8 | // // Bugly https://bugly.qq.com/docs 9 | // api deps_lib.profiler.bugly 10 | // api deps_lib.profiler.bugly_ndk 11 | // 12 | // // 饿了么 UETool https://github.com/eleme/UETool/blob/master/README_zh.md 13 | // debugImplementation deps_lib.profiler.uetool 14 | // releaseImplementation deps_lib.profiler.uetool_no_op 15 | // 16 | // // 内存检测工具 https://github.com/square/leakcanary 17 | // debugImplementation deps_lib.profiler.leakcanary 18 | } -------------------------------------------------------------------------------- /file/deps/local/prop_dev_utils.gradle: -------------------------------------------------------------------------------- 1 | // 是否使用 Maven 依赖 2 | def isMavenDeps = false 3 | // 加载本地文件配置 4 | Properties properties = new Properties() 5 | File localPropertiesFile = new File(rootDir, "dev_utils.properties") 6 | if (localPropertiesFile.exists()) { 7 | properties.load(localPropertiesFile.newDataInputStream()) 8 | // 是否使用 Maven 依赖 9 | isMavenDeps = properties.getProperty("is_maven_deps").toBoolean() 10 | } 11 | 12 | if (isMavenDeps) { 13 | // DevUtils 系列库 Maven 依赖 14 | apply from: rootProject.file(deps_maven.deps_dev_utils) 15 | } else { 16 | // DevUtils 系列库本地依赖 17 | apply from: rootProject.file(deps_maven.local_dev_utils) 18 | } -------------------------------------------------------------------------------- /file/gradle/build/lib_java.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java-library' 2 | 3 | java { 4 | sourceCompatibility = versions.javaVersion_str 5 | targetCompatibility = versions.javaVersion_str 6 | } 7 | 8 | compileJava { 9 | sourceCompatibility versions.javaVersion_str 10 | targetCompatibility versions.javaVersion_str 11 | } 12 | 13 | // 编码设置 14 | tasks.withType(JavaCompile).configureEach { 15 | options.encoding = "UTF-8" 16 | } -------------------------------------------------------------------------------- /file/gradle/build/router/arouter/build_arouter_app.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.alibaba.arouter' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-parcelize' 4 | apply plugin: 'kotlin-kapt' 5 | 6 | kapt { 7 | arguments { 8 | arg("AROUTER_MODULE_NAME", project.getName()) 9 | } 10 | } 11 | 12 | dependencies { 13 | 14 | // ARouter 路由 https://github.com/alibaba/ARouter 15 | api deps_lib.router.arouter_api // https://github.com/alibaba/ARouter/blob/master/README_CN.md 16 | kapt deps_lib.router.arouter_compiler 17 | } -------------------------------------------------------------------------------- /file/gradle/build/router/arouter/build_arouter_module.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'kotlin-android' 2 | apply plugin: 'kotlin-parcelize' 3 | apply plugin: 'kotlin-kapt' 4 | 5 | kapt { 6 | arguments { 7 | arg("AROUTER_MODULE_NAME", project.getName()) 8 | } 9 | } 10 | 11 | dependencies { 12 | 13 | // ARouter 路由 https://github.com/alibaba/ARouter 14 | api deps_lib.router.arouter_api // https://github.com/alibaba/ARouter/blob/master/README_CN.md 15 | kapt deps_lib.router.arouter_compiler 16 | } -------------------------------------------------------------------------------- /file/gradle/build/router/build_router_app.gradle: -------------------------------------------------------------------------------- 1 | //apply from: rootProject.file(files.build_arouter_app_gradle) 2 | apply from: rootProject.file(files.build_therouter_app_gradle) -------------------------------------------------------------------------------- /file/gradle/build/router/build_router_module.gradle: -------------------------------------------------------------------------------- 1 | //apply from: rootProject.file(files.build_arouter_module_gradle) 2 | apply from: rootProject.file(files.build_therouter_module_gradle) -------------------------------------------------------------------------------- /file/gradle/build/router/therouter/build_therouter_app.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'therouter' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-parcelize' 4 | apply plugin: 'kotlin-kapt' 5 | 6 | dependencies { 7 | 8 | // https://github.com/HuolalaTech/hll-wp-therouter-android/blob/main/README_CN.md 9 | // TheRouter 路由 https://github.com/HuolalaTech/hll-wp-therouter-android 10 | kapt deps_lib.router.therouter_apt 11 | api deps_lib.router.therouter_router 12 | } -------------------------------------------------------------------------------- /file/gradle/build/router/therouter/build_therouter_module.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'kotlin-android' 2 | apply plugin: 'kotlin-parcelize' 3 | apply plugin: 'kotlin-kapt' 4 | 5 | dependencies { 6 | 7 | // https://github.com/HuolalaTech/hll-wp-therouter-android/blob/main/README_CN.md 8 | // TheRouter 路由 https://github.com/HuolalaTech/hll-wp-therouter-android 9 | kapt deps_lib.router.therouter_apt 10 | api deps_lib.router.therouter_router 11 | } -------------------------------------------------------------------------------- /file/sign/demo.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/file/sign/demo.jks -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Oct 13 02:22:52 CST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip -------------------------------------------------------------------------------- /lib/DevApp/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevApp/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevAppX 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevAppX 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevAppX -------------------------------------------------------------------------------- /lib/DevApp/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/app/assist/floating/IFloatingEdge.java: -------------------------------------------------------------------------------- 1 | package dev.utils.app.assist.floating; 2 | 3 | import android.graphics.Point; 4 | import android.view.View; 5 | 6 | /** 7 | * detail: 悬浮窗边缘检测接口 8 | * @author Ttt 9 | *
10 |  *     {@link FloatingWindowManagerAssist2}
11 |  *     {@link DevFloatingTouchIMPL2}
12 |  *     悬浮窗触摸使用
13 |  * 
14 | */ 15 | public interface IFloatingEdge { 16 | 17 | /** 18 | * 计算悬浮窗边缘检测坐标 19 | * @param view 待计算 View 20 | * @param x 待变更 X 轴坐标 21 | * @param y 待变更 Y 轴坐标 22 | * @return 计算处理后的坐标值 23 | */ 24 | Point calculateEdge( 25 | View view, 26 | int x, 27 | int y 28 | ); 29 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/app/assist/lifecycle/ActivityLifecycleFilter.java: -------------------------------------------------------------------------------- 1 | package dev.utils.app.assist.lifecycle; 2 | 3 | import android.app.Activity; 4 | 5 | /** 6 | * detail: Activity 生命周期 过滤判断接口 7 | * @author Ttt 8 | */ 9 | public interface ActivityLifecycleFilter { 10 | 11 | /** 12 | * 判断是否过滤该类 ( 不进行添加等操作 ) 13 | * @param activity {@link Activity} 14 | * @return {@code true} yes, {@code false} no 15 | */ 16 | boolean filter(Activity activity); 17 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/app/assist/lifecycle/OnActivityDestroyedListener.java: -------------------------------------------------------------------------------- 1 | package dev.utils.app.assist.lifecycle; 2 | 3 | import android.app.Activity; 4 | 5 | /** 6 | * detail: Activity 销毁事件 7 | * @author Ttt 8 | */ 9 | public interface OnActivityDestroyedListener { 10 | 11 | /** 12 | * Activity 销毁通知 13 | * @param activity {@link Activity} 14 | */ 15 | void onActivityDestroyed(Activity activity); 16 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/app/assist/lifecycle/OnAppStatusChangedListener.java: -------------------------------------------------------------------------------- 1 | package dev.utils.app.assist.lifecycle; 2 | 3 | /** 4 | * detail: APP 状态改变事件 5 | * @author Ttt 6 | */ 7 | public interface OnAppStatusChangedListener { 8 | 9 | /** 10 | * 切换到前台 11 | */ 12 | void onForeground(); 13 | 14 | /** 15 | * 切换到后台 16 | */ 17 | void onBackground(); 18 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/app/assist/lifecycle/fragment/AbstractFragmentLifecycle.java: -------------------------------------------------------------------------------- 1 | package dev.utils.app.assist.lifecycle.fragment; 2 | 3 | import androidx.fragment.app.FragmentManager; 4 | 5 | /** 6 | * detail: Fragment LifecycleCallbacks 抽象类 7 | * @author Ttt 8 | */ 9 | public abstract class AbstractFragmentLifecycle 10 | extends FragmentManager.FragmentLifecycleCallbacks { 11 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/app/assist/lifecycle/fragment/FragmentLifecycleFilter.java: -------------------------------------------------------------------------------- 1 | package dev.utils.app.assist.lifecycle.fragment; 2 | 3 | import androidx.fragment.app.Fragment; 4 | import androidx.fragment.app.FragmentManager; 5 | 6 | /** 7 | * detail: Fragment 生命周期 过滤判断接口 8 | * @author Ttt 9 | */ 10 | public interface FragmentLifecycleFilter { 11 | 12 | /** 13 | * 判断是否过滤该类 ( 不进行添加等操作 ) 14 | * @param manager FragmentManager 15 | * @param fragment Fragment 16 | * @return {@code true} yes, {@code false} no 17 | */ 18 | boolean filter( 19 | FragmentManager manager, 20 | Fragment fragment 21 | ); 22 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/app/share/SPUtils.java: -------------------------------------------------------------------------------- 1 | package dev.utils.app.share; 2 | 3 | /** 4 | * detail: SharedPreferences 工具类 5 | * @author Ttt 6 | */ 7 | public final class SPUtils 8 | extends IPreferenceHolder { 9 | 10 | private SPUtils() { 11 | } 12 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/cipher/Cipher.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.cipher; 2 | 3 | /** 4 | * detail: 通用加解密中间层 5 | * @author Ttt 6 | */ 7 | public interface Cipher 8 | extends Decrypt, 9 | Encrypt { 10 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/cipher/Decrypt.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.cipher; 2 | 3 | /** 4 | * detail: 解密 ( 解码 ) 接口 5 | * @author Ttt 6 | */ 7 | public interface Decrypt { 8 | 9 | /** 10 | * 解密 ( 解码 ) 方法 11 | * @param data 待解码数据 12 | * @return 解码后的 byte[] 13 | */ 14 | byte[] decrypt(byte[] data); 15 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/cipher/Encrypt.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.cipher; 2 | 3 | /** 4 | * detail: 加密 ( 编码 ) 接口 5 | * @author Ttt 6 | */ 7 | public interface Encrypt { 8 | 9 | /** 10 | * 加密 ( 编码 ) 方法 11 | * @param data 待编码数据 12 | * @return 编码后的 byte[] 13 | */ 14 | byte[] encrypt(byte[] data); 15 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/DateSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * detail: Date 排序值 7 | * @author Ttt 8 | */ 9 | public interface DateSort { 10 | 11 | Date getDateSortValue(); 12 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/DateSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | import java.util.Date; 5 | 6 | /** 7 | * detail: Date 升序排序 8 | * @author Ttt 9 | */ 10 | public class DateSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | T t, 16 | T t1 17 | ) { 18 | Date date1 = (t != null) ? t.getDateSortValue() : null; 19 | Date date2 = (t1 != null) ? t1.getDateSortValue() : null; 20 | long value1 = (date1 != null) ? date1.getTime() : 0L; 21 | long value2 = (date2 != null) ? date2.getTime() : 0L; 22 | return Long.compare(value1, value2); 23 | } 24 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/DateSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | import java.util.Date; 5 | 6 | /** 7 | * detail: Date 降序排序 8 | * @author Ttt 9 | */ 10 | public class DateSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | T t, 16 | T t1 17 | ) { 18 | Date date1 = (t != null) ? t.getDateSortValue() : null; 19 | Date date2 = (t1 != null) ? t1.getDateSortValue() : null; 20 | long value1 = (date1 != null) ? date1.getTime() : 0L; 21 | long value2 = (date2 != null) ? date2.getTime() : 0L; 22 | return Long.compare(value2, value1); 23 | } 24 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/DoubleSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Double 排序值 5 | * @author Ttt 6 | */ 7 | public interface DoubleSort { 8 | 9 | double getDoubleSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/DoubleSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Double 升序排序 7 | * @author Ttt 8 | */ 9 | public class DoubleSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | double value1 = (t != null) ? t.getDoubleSortValue() : 0D; 18 | double value2 = (t1 != null) ? t1.getDoubleSortValue() : 0D; 19 | return Double.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/DoubleSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Double 降序排序 7 | * @author Ttt 8 | */ 9 | public class DoubleSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | double value1 = (t != null) ? t.getDoubleSortValue() : 0D; 18 | double value2 = (t1 != null) ? t1.getDoubleSortValue() : 0D; 19 | return Double.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileLastModifiedSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件修改时间升序排序 8 | * @author Ttt 9 | */ 10 | public class FileLastModifiedSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | long value1 = (f != null) ? f.lastModified() : 0L; 19 | long value2 = (f1 != null) ? f1.lastModified() : 0L; 20 | return Long.compare(value1, value2); 21 | } 22 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileLastModifiedSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件修改时间降序排序 8 | * @author Ttt 9 | */ 10 | public class FileLastModifiedSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | long value1 = (f != null) ? f.lastModified() : 0L; 19 | long value2 = (f1 != null) ? f1.lastModified() : 0L; 20 | return Long.compare(value2, value1); 21 | } 22 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileLengthSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件大小升序排序 8 | * @author Ttt 9 | *
10 |  *     不考虑文件夹内部文件大小, 文件夹大小根据 API length() 进行比较
11 |  * 
12 | */ 13 | public class FileLengthSortAsc 14 | implements Comparator { 15 | 16 | @Override 17 | public int compare( 18 | File f, 19 | File f1 20 | ) { 21 | long value1 = (f != null) ? f.length() : 0L; 22 | long value2 = (f1 != null) ? f1.length() : 0L; 23 | return Long.compare(value1, value2); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileLengthSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件大小降序排序 8 | * @author Ttt 9 | *
10 |  *     不考虑文件夹内部文件大小, 文件夹大小根据 API length() 进行比较
11 |  * 
12 | */ 13 | public class FileLengthSortDesc 14 | implements Comparator { 15 | 16 | @Override 17 | public int compare( 18 | File f, 19 | File f1 20 | ) { 21 | long value1 = (f != null) ? f.length() : 0L; 22 | long value2 = (f1 != null) ? f1.length() : 0L; 23 | return Long.compare(value2, value1); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileNameSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件名升序排序 8 | * @author Ttt 9 | */ 10 | public class FileNameSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return -1; 20 | } 21 | if (f.isDirectory() && f1.isFile()) { 22 | return -1; 23 | } 24 | if (f.isFile() && f1.isDirectory()) { 25 | return 1; 26 | } 27 | return f.getName().compareTo(f1.getName()); 28 | } 29 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileNameSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件名降序排序 8 | * @author Ttt 9 | */ 10 | public class FileNameSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return 0; 20 | } 21 | if (f.isDirectory() && f1.isFile()) { 22 | return 1; 23 | } 24 | if (f.isFile() && f1.isDirectory()) { 25 | return -1; 26 | } 27 | return f1.getName().compareTo(f.getName()); 28 | } 29 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件升序排序 8 | * @author Ttt 9 | */ 10 | public class FileSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return -1; 20 | } 21 | return f.compareTo(f1); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FileSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件降序排序 8 | * @author Ttt 9 | */ 10 | public class FileSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return 0; 20 | } 21 | return f1.compareTo(f); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FloatSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Float 排序值 5 | * @author Ttt 6 | */ 7 | public interface FloatSort { 8 | 9 | float getFloatSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FloatSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Float 升序排序 7 | * @author Ttt 8 | */ 9 | public class FloatSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | float value1 = (t != null) ? t.getFloatSortValue() : 0F; 18 | float value2 = (t1 != null) ? t1.getFloatSortValue() : 0F; 19 | return Float.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/FloatSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Float 降序排序 7 | * @author Ttt 8 | */ 9 | public class FloatSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | float value1 = (t != null) ? t.getFloatSortValue() : 0F; 18 | float value2 = (t1 != null) ? t1.getFloatSortValue() : 0F; 19 | return Float.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/IntSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Int 排序值 5 | * @author Ttt 6 | */ 7 | public interface IntSort { 8 | 9 | int getIntSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/IntSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Int 升序排序 7 | * @author Ttt 8 | */ 9 | public class IntSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | int value1 = (t != null) ? t.getIntSortValue() : 0; 18 | int value2 = (t1 != null) ? t1.getIntSortValue() : 0; 19 | return Integer.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/IntSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Int 降序排序 7 | * @author Ttt 8 | */ 9 | public class IntSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | int value1 = (t != null) ? t.getIntSortValue() : 0; 18 | int value2 = (t1 != null) ? t1.getIntSortValue() : 0; 19 | return Integer.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/LongSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Long 排序值 5 | * @author Ttt 6 | */ 7 | public interface LongSort { 8 | 9 | long getLongSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/LongSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Long 升序排序 7 | * @author Ttt 8 | */ 9 | public class LongSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | long value1 = (t != null) ? t.getLongSortValue() : 0L; 18 | long value2 = (t1 != null) ? t1.getLongSortValue() : 0L; 19 | return Long.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/LongSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Long 降序排序 7 | * @author Ttt 8 | */ 9 | public class LongSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | long value1 = (t != null) ? t.getLongSortValue() : 0L; 18 | long value2 = (t1 != null) ? t1.getLongSortValue() : 0L; 19 | return Long.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/StringSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: String 排序值 5 | * @author Ttt 6 | */ 7 | public interface StringSort { 8 | 9 | String getStringSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/StringSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: String 升序排序 7 | * @author Ttt 8 | */ 9 | public class StringSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | String value1 = (t != null) ? t.getStringSortValue() : null; 18 | String value2 = (t1 != null) ? t1.getStringSortValue() : null; 19 | if (value1 == null) value1 = ""; 20 | if (value2 == null) value2 = ""; 21 | return value1.compareTo(value2); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/StringSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: String 降序排序 7 | * @author Ttt 8 | */ 9 | public class StringSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | String value1 = (t != null) ? t.getStringSortValue() : null; 18 | String value2 = (t1 != null) ? t1.getStringSortValue() : null; 19 | if (value1 == null) value1 = ""; 20 | if (value2 == null) value2 = ""; 21 | return value2.compareTo(value1); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/WindowsExplorerFileSimpleComparator.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: Windows 目录资源文件排序比较器 8 | * @author Ttt 9 | */ 10 | public class WindowsExplorerFileSimpleComparator 11 | implements Comparator { 12 | 13 | private final WindowsExplorerStringSimpleComparator COMPARATOR = new WindowsExplorerStringSimpleComparator(); 14 | 15 | @Override 16 | public int compare( 17 | File f, 18 | File f1 19 | ) { 20 | if (f == null || f1 == null) { 21 | return -1; 22 | } 23 | return COMPARATOR.compare(f.getName(), f1.getName()); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/java/dev/utils/common/comparator/sort/WindowsExplorerFileSimpleComparator2.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: Windows 目录资源文件排序比较器 8 | * @author Ttt 9 | */ 10 | public class WindowsExplorerFileSimpleComparator2 11 | implements Comparator { 12 | 13 | private final WindowsExplorerStringSimpleComparator2 COMPARATOR = new WindowsExplorerStringSimpleComparator2(); 14 | 15 | @Override 16 | public int compare( 17 | File f, 18 | File f1 19 | ) { 20 | if (f == null || f1 == null) { 21 | return -1; 22 | } 23 | return COMPARATOR.compare(f.getName(), f1.getName()); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevApp/src/main/res/xml/dev_app_provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | 19 | 22 | 23 | 26 | -------------------------------------------------------------------------------- /lib/DevAssist/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevAssist/proguard-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevAssist/proguard-rules.pro -------------------------------------------------------------------------------- /lib/DevAssist/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevAssist 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevAssist 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevAssist -------------------------------------------------------------------------------- /lib/DevAssist/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/DevState.java: -------------------------------------------------------------------------------- 1 | package dev.base; 2 | 3 | /** 4 | * detail: 状态实体类 5 | * @author Ttt 6 | */ 7 | public class DevState 8 | extends DevObject { 9 | 10 | public DevState() { 11 | } 12 | 13 | public DevState(final T object) { 14 | super(object); 15 | } 16 | 17 | public DevState( 18 | final T object, 19 | final Object tag 20 | ) { 21 | super(object, tag); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/data/DataChanged.java: -------------------------------------------------------------------------------- 1 | package dev.base.data; 2 | 3 | /** 4 | * detail: 数据改变通知 5 | * @param 泛型 6 | * @author Ttt 7 | */ 8 | public interface DataChanged { 9 | 10 | // ========== 11 | // = 通知方法 = 12 | // ========== 13 | 14 | /** 15 | * 通知数据改变 16 | */ 17 | void notifyDataChanged(); 18 | 19 | /** 20 | * 通知某个数据改变 21 | * @param value {@link T} 22 | */ 23 | void notifyElementChanged(T value); 24 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/entry/DoubleEntry.java: -------------------------------------------------------------------------------- 1 | package dev.base.entry; 2 | 3 | import dev.base.DevEntry; 4 | 5 | public class DoubleEntry 6 | extends DevEntry { 7 | 8 | public DoubleEntry() { 9 | } 10 | 11 | public DoubleEntry(final Double key) { 12 | super(key); 13 | } 14 | 15 | public DoubleEntry( 16 | final Double key, 17 | final V value 18 | ) { 19 | super(key, value); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/entry/FloatEntry.java: -------------------------------------------------------------------------------- 1 | package dev.base.entry; 2 | 3 | import dev.base.DevEntry; 4 | 5 | public class FloatEntry 6 | extends DevEntry { 7 | 8 | public FloatEntry() { 9 | } 10 | 11 | public FloatEntry(final Float key) { 12 | super(key); 13 | } 14 | 15 | public FloatEntry( 16 | final Float key, 17 | final V value 18 | ) { 19 | super(key, value); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/entry/IntEntry.java: -------------------------------------------------------------------------------- 1 | package dev.base.entry; 2 | 3 | import dev.base.DevEntry; 4 | 5 | public class IntEntry 6 | extends DevEntry { 7 | 8 | public IntEntry() { 9 | } 10 | 11 | public IntEntry(final Integer key) { 12 | super(key); 13 | } 14 | 15 | public IntEntry( 16 | final Integer key, 17 | final V value 18 | ) { 19 | super(key, value); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/entry/LongEntry.java: -------------------------------------------------------------------------------- 1 | package dev.base.entry; 2 | 3 | import dev.base.DevEntry; 4 | 5 | public class LongEntry 6 | extends DevEntry { 7 | 8 | public LongEntry() { 9 | } 10 | 11 | public LongEntry(final Long key) { 12 | super(key); 13 | } 14 | 15 | public LongEntry( 16 | final Long key, 17 | final V value 18 | ) { 19 | super(key, value); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/entry/StringEntry.java: -------------------------------------------------------------------------------- 1 | package dev.base.entry; 2 | 3 | import dev.base.DevEntry; 4 | 5 | public class StringEntry 6 | extends DevEntry { 7 | 8 | public StringEntry() { 9 | } 10 | 11 | public StringEntry(final String key) { 12 | super(key); 13 | } 14 | 15 | public StringEntry( 16 | final String key, 17 | final V value 18 | ) { 19 | super(key, value); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/base/number/INumberListener.java: -------------------------------------------------------------------------------- 1 | package dev.base.number; 2 | 3 | /** 4 | * detail: 数量监听事件接口 5 | * @author Ttt 6 | */ 7 | public interface INumberListener { 8 | 9 | /** 10 | * 数量准备变化通知 11 | * @param isAdd 是否增加 12 | * @param curNumber 当前数量 13 | * @param afterNumber 处理之后的数量 14 | * @return {@code true} allow, {@code false} prohibit 15 | */ 16 | boolean onPrepareChanged( 17 | boolean isAdd, 18 | int curNumber, 19 | int afterNumber 20 | ); 21 | 22 | /** 23 | * 数量变化通知 24 | * @param isAdd 是否增加 25 | * @param curNumber 当前数量 26 | */ 27 | void onNumberChanged( 28 | boolean isAdd, 29 | int curNumber 30 | ); 31 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/callback/BaseCallback.java: -------------------------------------------------------------------------------- 1 | package dev.callback; 2 | 3 | import dev.base.DevObject; 4 | 5 | /** 6 | * detail: 回调基类 7 | * @author Ttt 8 | */ 9 | public class BaseCallback 10 | extends DevObject { 11 | 12 | public BaseCallback() { 13 | } 14 | 15 | public BaseCallback(final T object) { 16 | super(object); 17 | } 18 | 19 | public BaseCallback( 20 | final T object, 21 | final Object tag 22 | ) { 23 | super(object, tag); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/engine/barcode/listener/BarCodeDecodeCallback.java: -------------------------------------------------------------------------------- 1 | package dev.engine.barcode.listener; 2 | 3 | import dev.engine.barcode.IBarCodeEngine; 4 | 5 | /** 6 | * detail: 条码解码 ( 解析 ) 回调 7 | * @author Ttt 8 | */ 9 | public interface BarCodeDecodeCallback { 10 | 11 | /** 12 | * 条码解码 ( 解析 ) 回调 13 | * @param success 是否成功 14 | * @param result 识别结果 15 | * @param error 异常信息 16 | */ 17 | void onResult( 18 | boolean success, 19 | Result result, 20 | Throwable error 21 | ); 22 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/engine/barcode/listener/BarCodeEncodeCallback.java: -------------------------------------------------------------------------------- 1 | package dev.engine.barcode.listener; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | /** 6 | * detail: 条码编码 ( 生成 ) 回调 7 | * @author Ttt 8 | */ 9 | public interface BarCodeEncodeCallback { 10 | 11 | /** 12 | * 条码编码 ( 生成 ) 回调 13 | * @param success 是否成功 14 | * @param bitmap 条码图片 15 | * @param error 异常信息 16 | */ 17 | void onResult( 18 | boolean success, 19 | Bitmap bitmap, 20 | Throwable error 21 | ); 22 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/engine/compress/listener/CompressFilter.java: -------------------------------------------------------------------------------- 1 | package dev.engine.compress.listener; 2 | 3 | /** 4 | * detail: 压缩过滤接口 5 | * @author Ttt 6 | */ 7 | public interface CompressFilter { 8 | 9 | /** 10 | * 根据路径判断是否进行压缩 11 | * @param path 文件路径 12 | * @return {@code true} yes, {@code false} no 13 | */ 14 | boolean apply(String path); 15 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/engine/compress/listener/OnRenameListener.java: -------------------------------------------------------------------------------- 1 | package dev.engine.compress.listener; 2 | 3 | /** 4 | * detail: 修改压缩图片文件名接口 5 | * @author Ttt 6 | */ 7 | public interface OnRenameListener { 8 | 9 | /** 10 | * 压缩前调用该方法用于修改压缩后文件名 11 | * @param filePath 文件路径 12 | * @return 返回重命名后的字符串 13 | */ 14 | String rename(String filePath); 15 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/engine/image/listener/BitmapListener.java: -------------------------------------------------------------------------------- 1 | package dev.engine.image.listener; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | /** 6 | * detail: Bitmap 加载事件 7 | * @author Ttt 8 | */ 9 | public abstract class BitmapListener 10 | implements LoadListener { 11 | 12 | @Override 13 | public final Class getTranscodeType() { 14 | return Bitmap.class; 15 | } 16 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/engine/image/listener/DrawableListener.java: -------------------------------------------------------------------------------- 1 | package dev.engine.image.listener; 2 | 3 | import android.graphics.drawable.Drawable; 4 | 5 | /** 6 | * detail: Drawable 加载事件 7 | * @author Ttt 8 | */ 9 | public abstract class DrawableListener 10 | implements LoadListener { 11 | 12 | @Override 13 | public final Class getTranscodeType() { 14 | return Drawable.class; 15 | } 16 | } -------------------------------------------------------------------------------- /lib/DevAssist/src/main/java/dev/engine/storage/listener/OnInsertListener.java: -------------------------------------------------------------------------------- 1 | package dev.engine.storage.listener; 2 | 3 | import dev.base.DevSource; 4 | import dev.engine.storage.IStorageEngine; 5 | 6 | /** 7 | * detail: 插入多媒体资源事件 8 | * @author Ttt 9 | */ 10 | public interface OnInsertListener { 11 | 12 | /** 13 | * 插入多媒体资源结果方法 14 | * @param result 存储结果 15 | * @param params 原始参数 16 | * @param source 原始数据 17 | */ 18 | void onResult( 19 | Result result, 20 | Item params, 21 | DevSource source 22 | ); 23 | } -------------------------------------------------------------------------------- /lib/DevBase/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevBase/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevBase 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevBase 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevBase -------------------------------------------------------------------------------- /lib/DevBase/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/DevBase/src/main/java/dev/base/able/IDevBase.kt: -------------------------------------------------------------------------------- 1 | package dev.base.able 2 | 3 | /** 4 | * detail: 基类相关方法 5 | * @author Ttt 6 | */ 7 | interface IDevBase : IDevBaseConfig, 8 | IDevBaseContent, 9 | IDevBaseMethod, 10 | IDevBaseUIOperation -------------------------------------------------------------------------------- /lib/DevBase/src/main/java/dev/base/able/IDevBaseConfig.kt: -------------------------------------------------------------------------------- 1 | package dev.base.able 2 | 3 | /** 4 | * detail: 基类配置 5 | * @author Ttt 6 | */ 7 | interface IDevBaseConfig { 8 | 9 | /** 10 | * 是否进行 Activity 管理控制 11 | * 可通过 lifecycle 实现 Activity Manager 12 | */ 13 | fun isActivityManager(): Boolean { 14 | return true 15 | } 16 | } -------------------------------------------------------------------------------- /lib/DevBase/src/main/java/dev/base/able/IDevBaseContent.kt: -------------------------------------------------------------------------------- 1 | package dev.base.able 2 | 3 | import android.view.View 4 | 5 | /** 6 | * detail: 基类 Content View 相关方法 7 | * @author Ttt 8 | */ 9 | interface IDevBaseContent { 10 | 11 | /** 12 | * 获取 Content Layout Id 13 | * @return Content Layout Id 14 | */ 15 | fun baseContentId(): Int 16 | 17 | /** 18 | * 获取 Content Layout View 19 | * @return Content Layout View 20 | */ 21 | fun baseContentView(): View? 22 | } -------------------------------------------------------------------------------- /lib/DevBase/src/main/java/dev/base/able/IDevBaseLayout.kt: -------------------------------------------------------------------------------- 1 | package dev.base.able 2 | 3 | import android.view.View 4 | 5 | /** 6 | * detail: 基类 Layout View 相关方法 7 | * @author Ttt 8 | */ 9 | interface IDevBaseLayout { 10 | 11 | /** 12 | * 获取 Layout Id ( 用于 contentLinear addView ) 13 | * @return Layout Id 14 | */ 15 | fun baseLayoutId(): Int 16 | 17 | /** 18 | * 获取 Layout View ( 用于 contentLinear addView ) 19 | * @return Layout View 20 | */ 21 | fun baseLayoutView(): View? 22 | 23 | /** 24 | * Layout View addView 是否 LayoutParams.MATCH_PARENT 25 | */ 26 | fun isLayoutMatchParent(): Boolean { 27 | return true 28 | } 29 | } -------------------------------------------------------------------------------- /lib/DevBase/src/main/java/dev/base/activity/DevBaseActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.base.activity 2 | 3 | import android.view.View 4 | 5 | /** 6 | * detail: Activity 基类 7 | * @author Ttt 8 | */ 9 | abstract class DevBaseActivity : AbstractDevBaseActivity(), 10 | View.OnClickListener { 11 | override fun onClick(v: View) {} 12 | } -------------------------------------------------------------------------------- /lib/DevBase/src/main/java/dev/base/fragment/DevBaseFragment.kt: -------------------------------------------------------------------------------- 1 | package dev.base.fragment 2 | 3 | import android.view.View 4 | 5 | /** 6 | * detail: Fragment 基类 7 | * @author Ttt 8 | */ 9 | abstract class DevBaseFragment : AbstractDevBaseFragment(), 10 | View.OnClickListener { 11 | override fun onClick(v: View) {} 12 | } -------------------------------------------------------------------------------- /lib/DevBaseMVVM/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevBaseMVVM/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevBaseMVVM 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevBaseMVVM 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevBaseMVVM -------------------------------------------------------------------------------- /lib/DevBaseMVVM/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/DevBaseMVVM/src/main/java/dev/base/able/IDevBaseViewDataBinding.kt: -------------------------------------------------------------------------------- 1 | package dev.base.able 2 | 3 | import android.view.View 4 | import androidx.databinding.ViewDataBinding 5 | 6 | /** 7 | * detail: 基类 ViewDataBinding 接口 8 | * @author Ttt 9 | */ 10 | interface IDevBaseViewDataBinding { 11 | 12 | /** 13 | * 获取待 Bind View 14 | */ 15 | fun getBindingView(): View? 16 | 17 | /** 18 | * 是否 Bind View 19 | */ 20 | fun isViewBinding(): Boolean { 21 | return true 22 | } 23 | 24 | /** 25 | * 是否分离 ( 销毁 ) Binding 26 | */ 27 | fun isDetachBinding(): Boolean { 28 | return isViewBinding() 29 | } 30 | } -------------------------------------------------------------------------------- /lib/DevBaseMVVM/src/main/java/dev/base/expand/mvvm/MVVM.kt: -------------------------------------------------------------------------------- 1 | package dev.base.expand.mvvm 2 | 3 | import androidx.lifecycle.ViewModel 4 | 5 | /** 6 | * detail: MVVM 类 7 | * @author Ttt 8 | */ 9 | class MVVM private constructor() { 10 | 11 | /** 12 | * detail: 空实现 ViewModel 13 | * @author Ttt 14 | */ 15 | class VMImpl : ViewModel() 16 | } -------------------------------------------------------------------------------- /lib/DevDeprecated/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevDeprecated/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Change Log 2 | ========== 3 | 4 | Version 1.0.0 *(2025-03-21)* 5 | ---------------------------- 6 | 7 | * Initial release 8 | -------------------------------------------------------------------------------- /lib/DevDeprecated/proguard-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/proguard-rules.pro -------------------------------------------------------------------------------- /lib/DevDeprecated/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevDeprecated 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevDeprecated 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevDeprecated -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_magnify_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_magnify_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_magnify_left_top_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_magnify_right_top_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_down_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_down_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_right_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_right_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_up_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_push_up_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_shrink_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_shrink_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_shrink_left_bottom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/anim/dev_shrink_right_bottom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_frame.9.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_error_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_error_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_info_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_info_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_success_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_success_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_warning_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-hdpi/dev_toast_icon_warning_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_frame.9.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_error_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_error_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_info_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_info_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_success_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_success_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_warning_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable-xhdpi/dev_toast_icon_warning_white.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/drawable/dialog_transparent.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevDeprecated/src/main/res/drawable/dialog_transparent.9.png -------------------------------------------------------------------------------- /lib/DevDeprecated/src/main/res/values/unified.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 24.0dp 4 | 8.0dp 5 | 8.0dp 6 | -------------------------------------------------------------------------------- /lib/DevEngine/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevEngine/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevEngine 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevEngine 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevEngine -------------------------------------------------------------------------------- /lib/DevEngine/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/DevEngine/src/main/java/dev/engine/cache/CacheConfig.kt: -------------------------------------------------------------------------------- 1 | package dev.engine.cache 2 | 3 | import dev.utils.app.cache.DevCache 4 | import dev.utils.common.cipher.Cipher 5 | 6 | /** 7 | * detail: Cache Config 8 | * @author Ttt 9 | */ 10 | open class CacheConfig( 11 | cipher: Cipher?, 12 | val mDevCache: DevCache 13 | ) : ICacheEngine.EngineConfig(cipher) -------------------------------------------------------------------------------- /lib/DevEngine/src/main/java/dev/engine/cache/DataItem.kt: -------------------------------------------------------------------------------- 1 | package dev.engine.cache 2 | 3 | /** 4 | * detail: Cache ( Data、Params ) Item 5 | * @author Ttt 6 | */ 7 | open class DataItem( 8 | key: String?, 9 | type: Int, 10 | size: Long, 11 | saveTime: Long, 12 | validTime: Long, 13 | isPermanent: Boolean, 14 | isDue: Boolean 15 | ) : ICacheEngine.EngineItem(key, type, size, saveTime, validTime, isPermanent, isDue) -------------------------------------------------------------------------------- /lib/DevEngine/src/main/java/dev/engine/json/JSONConfig.kt: -------------------------------------------------------------------------------- 1 | package dev.engine.json 2 | 3 | import com.google.gson.Gson 4 | 5 | /** 6 | * detail: JSON Config 7 | * @author Ttt 8 | */ 9 | open class JSONConfig : IJSONEngine.EngineConfig() { 10 | @JvmField 11 | var gson: Gson? = null 12 | } -------------------------------------------------------------------------------- /lib/DevJava/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevJava/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file(files.lib_java_gradle) 2 | 3 | version versions.dev_java_version 4 | 5 | // 是否发布版本 6 | def isPublishing = false 7 | 8 | // tasks-build-assemble 9 | // publishing-publishReleasePublicationToXXXXXRepository 10 | //apply from: rootProject.file(files.bintray_upload_java) 11 | //apply from: rootProject.file(files.sonatype_upload_java) 12 | if (isPublishing) { 13 | apply from: rootProject.file(files.sonatype_upload_java) 14 | } -------------------------------------------------------------------------------- /lib/DevJava/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevJava 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevJava 5 | project.packaging=jar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevJava -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/cipher/Cipher.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.cipher; 2 | 3 | /** 4 | * detail: 通用加解密中间层 5 | * @author Ttt 6 | */ 7 | public interface Cipher 8 | extends Decrypt, 9 | Encrypt { 10 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/cipher/Decrypt.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.cipher; 2 | 3 | /** 4 | * detail: 解密 ( 解码 ) 接口 5 | * @author Ttt 6 | */ 7 | public interface Decrypt { 8 | 9 | /** 10 | * 解密 ( 解码 ) 方法 11 | * @param data 待解码数据 12 | * @return 解码后的 byte[] 13 | */ 14 | byte[] decrypt(byte[] data); 15 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/cipher/Encrypt.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.cipher; 2 | 3 | /** 4 | * detail: 加密 ( 编码 ) 接口 5 | * @author Ttt 6 | */ 7 | public interface Encrypt { 8 | 9 | /** 10 | * 加密 ( 编码 ) 方法 11 | * @param data 待编码数据 12 | * @return 编码后的 byte[] 13 | */ 14 | byte[] encrypt(byte[] data); 15 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/DateSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * detail: Date 排序值 7 | * @author Ttt 8 | */ 9 | public interface DateSort { 10 | 11 | Date getDateSortValue(); 12 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/DateSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | import java.util.Date; 5 | 6 | /** 7 | * detail: Date 升序排序 8 | * @author Ttt 9 | */ 10 | public class DateSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | T t, 16 | T t1 17 | ) { 18 | Date date1 = (t != null) ? t.getDateSortValue() : null; 19 | Date date2 = (t1 != null) ? t1.getDateSortValue() : null; 20 | long value1 = (date1 != null) ? date1.getTime() : 0L; 21 | long value2 = (date2 != null) ? date2.getTime() : 0L; 22 | return Long.compare(value1, value2); 23 | } 24 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/DateSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | import java.util.Date; 5 | 6 | /** 7 | * detail: Date 降序排序 8 | * @author Ttt 9 | */ 10 | public class DateSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | T t, 16 | T t1 17 | ) { 18 | Date date1 = (t != null) ? t.getDateSortValue() : null; 19 | Date date2 = (t1 != null) ? t1.getDateSortValue() : null; 20 | long value1 = (date1 != null) ? date1.getTime() : 0L; 21 | long value2 = (date2 != null) ? date2.getTime() : 0L; 22 | return Long.compare(value2, value1); 23 | } 24 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/DoubleSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Double 排序值 5 | * @author Ttt 6 | */ 7 | public interface DoubleSort { 8 | 9 | double getDoubleSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/DoubleSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Double 升序排序 7 | * @author Ttt 8 | */ 9 | public class DoubleSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | double value1 = (t != null) ? t.getDoubleSortValue() : 0D; 18 | double value2 = (t1 != null) ? t1.getDoubleSortValue() : 0D; 19 | return Double.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/DoubleSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Double 降序排序 7 | * @author Ttt 8 | */ 9 | public class DoubleSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | double value1 = (t != null) ? t.getDoubleSortValue() : 0D; 18 | double value2 = (t1 != null) ? t1.getDoubleSortValue() : 0D; 19 | return Double.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileLastModifiedSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件修改时间升序排序 8 | * @author Ttt 9 | */ 10 | public class FileLastModifiedSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | long value1 = (f != null) ? f.lastModified() : 0L; 19 | long value2 = (f1 != null) ? f1.lastModified() : 0L; 20 | return Long.compare(value1, value2); 21 | } 22 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileLastModifiedSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件修改时间降序排序 8 | * @author Ttt 9 | */ 10 | public class FileLastModifiedSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | long value1 = (f != null) ? f.lastModified() : 0L; 19 | long value2 = (f1 != null) ? f1.lastModified() : 0L; 20 | return Long.compare(value2, value1); 21 | } 22 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileLengthSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件大小升序排序 8 | * @author Ttt 9 | *
10 |  *     不考虑文件夹内部文件大小, 文件夹大小根据 API length() 进行比较
11 |  * 
12 | */ 13 | public class FileLengthSortAsc 14 | implements Comparator { 15 | 16 | @Override 17 | public int compare( 18 | File f, 19 | File f1 20 | ) { 21 | long value1 = (f != null) ? f.length() : 0L; 22 | long value2 = (f1 != null) ? f1.length() : 0L; 23 | return Long.compare(value1, value2); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileLengthSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件大小降序排序 8 | * @author Ttt 9 | *
10 |  *     不考虑文件夹内部文件大小, 文件夹大小根据 API length() 进行比较
11 |  * 
12 | */ 13 | public class FileLengthSortDesc 14 | implements Comparator { 15 | 16 | @Override 17 | public int compare( 18 | File f, 19 | File f1 20 | ) { 21 | long value1 = (f != null) ? f.length() : 0L; 22 | long value2 = (f1 != null) ? f1.length() : 0L; 23 | return Long.compare(value2, value1); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileNameSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件名升序排序 8 | * @author Ttt 9 | */ 10 | public class FileNameSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return -1; 20 | } 21 | if (f.isDirectory() && f1.isFile()) { 22 | return -1; 23 | } 24 | if (f.isFile() && f1.isDirectory()) { 25 | return 1; 26 | } 27 | return f.getName().compareTo(f1.getName()); 28 | } 29 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileNameSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件名降序排序 8 | * @author Ttt 9 | */ 10 | public class FileNameSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return 0; 20 | } 21 | if (f.isDirectory() && f1.isFile()) { 22 | return 1; 23 | } 24 | if (f.isFile() && f1.isDirectory()) { 25 | return -1; 26 | } 27 | return f1.getName().compareTo(f.getName()); 28 | } 29 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件升序排序 8 | * @author Ttt 9 | */ 10 | public class FileSortAsc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return -1; 20 | } 21 | return f.compareTo(f1); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FileSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: 文件降序排序 8 | * @author Ttt 9 | */ 10 | public class FileSortDesc 11 | implements Comparator { 12 | 13 | @Override 14 | public int compare( 15 | File f, 16 | File f1 17 | ) { 18 | if (f == null || f1 == null) { 19 | return 0; 20 | } 21 | return f1.compareTo(f); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FloatSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Float 排序值 5 | * @author Ttt 6 | */ 7 | public interface FloatSort { 8 | 9 | float getFloatSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FloatSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Float 升序排序 7 | * @author Ttt 8 | */ 9 | public class FloatSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | float value1 = (t != null) ? t.getFloatSortValue() : 0F; 18 | float value2 = (t1 != null) ? t1.getFloatSortValue() : 0F; 19 | return Float.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/FloatSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Float 降序排序 7 | * @author Ttt 8 | */ 9 | public class FloatSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | float value1 = (t != null) ? t.getFloatSortValue() : 0F; 18 | float value2 = (t1 != null) ? t1.getFloatSortValue() : 0F; 19 | return Float.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/IntSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Int 排序值 5 | * @author Ttt 6 | */ 7 | public interface IntSort { 8 | 9 | int getIntSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/IntSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Int 升序排序 7 | * @author Ttt 8 | */ 9 | public class IntSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | int value1 = (t != null) ? t.getIntSortValue() : 0; 18 | int value2 = (t1 != null) ? t1.getIntSortValue() : 0; 19 | return Integer.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/IntSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Int 降序排序 7 | * @author Ttt 8 | */ 9 | public class IntSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | int value1 = (t != null) ? t.getIntSortValue() : 0; 18 | int value2 = (t1 != null) ? t1.getIntSortValue() : 0; 19 | return Integer.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/LongSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: Long 排序值 5 | * @author Ttt 6 | */ 7 | public interface LongSort { 8 | 9 | long getLongSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/LongSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Long 升序排序 7 | * @author Ttt 8 | */ 9 | public class LongSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | long value1 = (t != null) ? t.getLongSortValue() : 0L; 18 | long value2 = (t1 != null) ? t1.getLongSortValue() : 0L; 19 | return Long.compare(value1, value2); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/LongSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: Long 降序排序 7 | * @author Ttt 8 | */ 9 | public class LongSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | long value1 = (t != null) ? t.getLongSortValue() : 0L; 18 | long value2 = (t1 != null) ? t1.getLongSortValue() : 0L; 19 | return Long.compare(value2, value1); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/StringSort.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | /** 4 | * detail: String 排序值 5 | * @author Ttt 6 | */ 7 | public interface StringSort { 8 | 9 | String getStringSortValue(); 10 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/StringSortAsc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: String 升序排序 7 | * @author Ttt 8 | */ 9 | public class StringSortAsc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | String value1 = (t != null) ? t.getStringSortValue() : null; 18 | String value2 = (t1 != null) ? t1.getStringSortValue() : null; 19 | if (value1 == null) value1 = ""; 20 | if (value2 == null) value2 = ""; 21 | return value1.compareTo(value2); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/StringSortDesc.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * detail: String 降序排序 7 | * @author Ttt 8 | */ 9 | public class StringSortDesc 10 | implements Comparator { 11 | 12 | @Override 13 | public int compare( 14 | T t, 15 | T t1 16 | ) { 17 | String value1 = (t != null) ? t.getStringSortValue() : null; 18 | String value2 = (t1 != null) ? t1.getStringSortValue() : null; 19 | if (value1 == null) value1 = ""; 20 | if (value2 == null) value2 = ""; 21 | return value2.compareTo(value1); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/WindowsExplorerFileSimpleComparator.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: Windows 目录资源文件排序比较器 8 | * @author Ttt 9 | */ 10 | public class WindowsExplorerFileSimpleComparator 11 | implements Comparator { 12 | 13 | private final WindowsExplorerStringSimpleComparator COMPARATOR = new WindowsExplorerStringSimpleComparator(); 14 | 15 | @Override 16 | public int compare( 17 | File f, 18 | File f1 19 | ) { 20 | if (f == null || f1 == null) { 21 | return -1; 22 | } 23 | return COMPARATOR.compare(f.getName(), f1.getName()); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevJava/src/main/java/dev/utils/common/comparator/sort/WindowsExplorerFileSimpleComparator2.java: -------------------------------------------------------------------------------- 1 | package dev.utils.common.comparator.sort; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * detail: Windows 目录资源文件排序比较器 8 | * @author Ttt 9 | */ 10 | public class WindowsExplorerFileSimpleComparator2 11 | implements Comparator { 12 | 13 | private final WindowsExplorerStringSimpleComparator2 COMPARATOR = new WindowsExplorerStringSimpleComparator2(); 14 | 15 | @Override 16 | public int compare( 17 | File f, 18 | File f1 19 | ) { 20 | if (f == null || f1 == null) { 21 | return -1; 22 | } 23 | return COMPARATOR.compare(f.getName(), f1.getName()); 24 | } 25 | } -------------------------------------------------------------------------------- /lib/DevSimple/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevSimple/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Change Log 2 | ========== 3 | 4 | Version 1.0.4 *(2025-06-XX)* 5 | ---------------------------- 6 | 7 | * `[Merge]` 合并 DevMVVM、DevAgile 代码统一到 DevSimple 中并进行重构 8 | 9 | Version 1.0.3 *(2025-03-21)* 10 | ---------------------------- 11 | 12 | * `[Chore]` 依赖 DevMVVM 库同步升级 13 | 14 | Version 1.0.2 *(2024-12-11)* 15 | ---------------------------- 16 | 17 | * `[Chore]` 依赖 DevMVVM 库同步升级 18 | 19 | Version 1.0.1 *(2024-06-04)* 20 | ---------------------------- 21 | 22 | * `[Config]` 更新 IUIController、UIThemeExt 默认配置 23 | 24 | * `[Update]` 更新 SimpleActivityIMPL、SimpleFragmentIMPL 匿名函数处理以及相关联实用类变更 25 | 26 | Version 1.0.0 *(2024-05-15)* 27 | ---------------------------- 28 | 29 | * Initial release 30 | -------------------------------------------------------------------------------- /lib/DevSimple/README.md: -------------------------------------------------------------------------------- 1 | 2 |

暂无文档,具体使用查看代码

3 | -------------------------------------------------------------------------------- /lib/DevSimple/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevSimple 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevSimple 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevSimple -------------------------------------------------------------------------------- /lib/DevSimple/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/agile/engine/debug/IDebugEngine.kt: -------------------------------------------------------------------------------- 1 | package dev.agile.engine.debug 2 | 3 | import androidx.fragment.app.FragmentActivity 4 | 5 | /** 6 | * detail: Debug 编译辅助开发 Engine 接口 7 | * @author Ttt 8 | */ 9 | interface IDebugEngine { 10 | 11 | /** 12 | * 设置 Debug 功能开关 13 | * @param display 是否显示 Debug 功能 14 | */ 15 | fun setDebugFunction(display: Boolean) 16 | 17 | /** 18 | * 连接 ( 显示 ) Debug 功能关联 19 | * @param activity 所属 Activity 20 | */ 21 | fun attachDebug(activity: FragmentActivity?) 22 | 23 | /** 24 | * 分离 ( 隐藏 ) Debug 功能关联 25 | * @param activity 所属 Activity 26 | */ 27 | fun detachDebug(activity: FragmentActivity?) 28 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/agile/interfaces/FunctionFlowCall.kt: -------------------------------------------------------------------------------- 1 | package dev.agile.interfaces 2 | 3 | /** 4 | * detail: 方法流程回调 5 | * @author Ttt 6 | */ 7 | interface FunctionFlowCall { 8 | 9 | // 执行方法体 10 | fun block() = run { } 11 | 12 | // 开始执行 13 | fun start() = run { } 14 | 15 | // 执行成功 16 | fun success() = run { } 17 | 18 | // 执行异常 19 | fun error() = run { } 20 | 21 | // 执行结束 22 | fun finish() = run { } 23 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/agile/livedata/AbsentLiveData.kt: -------------------------------------------------------------------------------- 1 | package dev.agile.livedata 2 | 3 | import androidx.lifecycle.LiveData 4 | 5 | /** 6 | * detail: 缺少数据 ( null ) 通用 LiveData 7 | * @author Ttt 8 | */ 9 | class AbsentLiveData : LiveData() { 10 | init { 11 | postValue(null) 12 | } 13 | 14 | companion object { 15 | fun create() = AbsentLiveData() 16 | } 17 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/agile/livedata/AbsentMutableLiveData.kt: -------------------------------------------------------------------------------- 1 | package dev.agile.livedata 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | 5 | /** 6 | * detail: 缺少数据 ( null ) 通用 MutableLiveData 7 | * @author Ttt 8 | */ 9 | class AbsentMutableLiveData : MutableLiveData() { 10 | init { 11 | postValue(null) 12 | } 13 | 14 | companion object { 15 | fun create() = AbsentMutableLiveData() 16 | } 17 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/agile/repository/Status.kt: -------------------------------------------------------------------------------- 1 | package dev.agile.repository 2 | 3 | /** 4 | * Status of a resource that is provided to the UI. 5 | * These are usually created by the Repository classes where they return 6 | * `LiveData>` to pass back the latest data to the UI with its fetch status. 7 | */ 8 | enum class Status { 9 | LOADING, 10 | SUCCESS, 11 | ERROR, 12 | EMPTY, 13 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/base/adapter/item/ItemBinding.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.base.adapter.item 2 | 3 | import android.util.SparseArray 4 | import androidx.annotation.LayoutRes 5 | 6 | /** 7 | * detail: Item Binding 信息类 8 | * @author Ttt 9 | */ 10 | class ItemBinding( 11 | // Item 绑定实体类 12 | val variableId: Int, 13 | // DataBinding 绑定布局 14 | @LayoutRes val layoutRes: Int 15 | ) { 16 | 17 | companion object { 18 | 19 | fun of( 20 | variableId: Int, 21 | @LayoutRes layoutRes: Int 22 | ): ItemBinding { 23 | return ItemBinding(variableId, layoutRes) 24 | } 25 | } 26 | 27 | // 额外绑定参数 28 | private val extraBindings: SparseArray? = null 29 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/base/viewmodel/LifecycleViewModel.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.base.viewmodel 2 | 3 | import androidx.lifecycle.DefaultLifecycleObserver 4 | import androidx.lifecycle.ViewModel 5 | 6 | /** 7 | * detail: 监听生命周期 ViewModel 8 | * @author Ttt 9 | */ 10 | open class LifecycleViewModel : ViewModel(), 11 | DefaultLifecycleObserver -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/binding/view/ConstraintLayout.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.binding.view 2 | 3 | import androidx.constraintlayout.widget.Guideline 4 | import androidx.databinding.BindingAdapter 5 | 6 | // =================================== 7 | // = ConstraintLayout BindingAdapter = 8 | // =================================== 9 | 10 | @BindingAdapter("binding_layoutConstraintGuideBegin") 11 | fun Guideline.bindingLayoutConstraintGuideBegin(margin: Int) { 12 | this.setGuidelineBegin(margin) 13 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/binding/view/TextView.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.binding.view 2 | 3 | import android.widget.TextView 4 | import androidx.databinding.BindingAdapter 5 | import dev.utils.app.TextViewUtils 6 | 7 | // =========================== 8 | // = TextView BindingAdapter = 9 | // =========================== 10 | 11 | // ============= 12 | // = textStyle = 13 | // ============= 14 | 15 | @BindingAdapter("binding_textBold") 16 | fun TextView.bindingTextBold(bold: Boolean) { 17 | TextViewUtils.setBold(this, bold) 18 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/command/BindingClick.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.command 2 | 3 | /** 4 | * detail: DataBinding 点击事件 5 | * @author Ttt 6 | */ 7 | interface BindingClick { 8 | 9 | fun onClick(value: T) 10 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/command/BindingConsumer.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.command 2 | 3 | /** 4 | * detail: DataBinding 消费事件 5 | * @author Ttt 6 | */ 7 | interface BindingConsumer { 8 | 9 | /** 10 | * 传入指定参数执行操作 11 | * @param value T 12 | */ 13 | fun accept(value: T) 14 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/command/BindingGet.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.command 2 | 3 | /** 4 | * detail: DataBinding 通用获取接口 5 | * @author Ttt 6 | */ 7 | interface BindingGet { 8 | 9 | /** 10 | * 获取泛型值 11 | * @return T 12 | */ 13 | fun get(): T 14 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/utils/Resource.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.utils 2 | 3 | import dev.utils.app.ResourceUtils 4 | 5 | // ============ 6 | // = Resource = 7 | // ============ 8 | 9 | /** 10 | * 获取 R.string.id String 11 | * @return String 12 | */ 13 | fun Int.toResString(): String { 14 | return ResourceUtils.getString(this) 15 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/mvvm/utils/hi/HiInlineOnly.kt: -------------------------------------------------------------------------------- 1 | package dev.mvvm.utils.hi 2 | 3 | /** 4 | * Specifies that this function should not be called directly without inlining 5 | */ 6 | @Target( 7 | AnnotationTarget.FUNCTION, 8 | AnnotationTarget.PROPERTY, 9 | AnnotationTarget.PROPERTY_GETTER, 10 | AnnotationTarget.PROPERTY_SETTER 11 | ) 12 | @DslMarker 13 | @Retention(AnnotationRetention.BINARY) 14 | internal annotation class HiInlineOnly -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/simple/app/BaseAppViewModel.kt: -------------------------------------------------------------------------------- 1 | package dev.simple.app 2 | 3 | import dev.simple.app.controller.viewmodel.UIViewModel 4 | 5 | /** 6 | * detail: Base App ViewModel 7 | * @author Ttt 8 | * 使用方法【统一继承该类即可】 9 | */ 10 | open class BaseAppViewModel : UIViewModel() -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/simple/app/base/VMType.kt: -------------------------------------------------------------------------------- 1 | package dev.simple.app.base 2 | 3 | /** 4 | * detail: Activity ViewModel 创建类型 5 | * @author Ttt 6 | */ 7 | enum class ActivityVMType { 8 | 9 | ACTIVITY, 10 | 11 | APPLICATION 12 | } 13 | 14 | /** 15 | * detail: Fragment ViewModel 创建类型 16 | * @author Ttt 17 | */ 18 | enum class FragmentVMType { 19 | 20 | FRAGMENT, 21 | 22 | ACTIVITY, 23 | 24 | APPLICATION 25 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/simple/app/base/interfaces/BindingLayoutView.kt: -------------------------------------------------------------------------------- 1 | package dev.simple.app.base.interfaces 2 | 3 | import android.view.LayoutInflater 4 | import android.view.View 5 | import androidx.appcompat.app.AppCompatActivity 6 | import androidx.fragment.app.Fragment 7 | 8 | /** 9 | * detail: Base Activity、Fragment 创建 Layout View 10 | * @author Ttt 11 | */ 12 | interface BindingLayoutView { 13 | 14 | fun bind(value: T, inflater: LayoutInflater): View? 15 | } 16 | 17 | interface BindingActivityView : BindingLayoutView 18 | 19 | interface BindingFragmentView : BindingLayoutView -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/simple/app/controller/interfaces/IController.kt: -------------------------------------------------------------------------------- 1 | package dev.simple.app.controller.interfaces 2 | 3 | /** 4 | * detail: Base 汇总控制器接口 5 | * @author Ttt 6 | */ 7 | interface IController : IUIController { 8 | 9 | // ======================= 10 | // = ControllerViewModel = 11 | // ======================= 12 | 13 | /** 14 | * 是否初始化 ControllerViewModel 相关参数 15 | * @return `true` yes, `false` no 16 | */ 17 | fun isControllerViewModelInit(): Boolean = true 18 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/simple/app/controller/ui/skeleton/PageLoadingSkeletonFactory.kt: -------------------------------------------------------------------------------- 1 | package dev.simple.app.controller.ui.skeleton 2 | 3 | /** 4 | * detail: Page Loading 骨架工厂类 5 | * @author Ttt 6 | */ 7 | class PageLoadingSkeletonFactory : IViewAssistFactoryRegister { 8 | 9 | override fun register(factory: IViewAssistFactory) { 10 | factory.register() 11 | } 12 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/java/dev/simple/app/controller/viewmodel/UIViewModel.kt: -------------------------------------------------------------------------------- 1 | package dev.simple.app.controller.viewmodel 2 | 3 | import androidx.databinding.ObservableInt 4 | import dev.utils.app.ScreenUtils 5 | 6 | /** 7 | * detail: UI ViewModel 8 | * @author Ttt 9 | */ 10 | open class UIViewModel : ControllerViewModel() { 11 | 12 | // 状态栏高度 13 | val statusBarHeight = ObservableInt(ScreenUtils.getStatusBarHeight2()) 14 | 15 | // 状态栏高度 ( 负数 ) 16 | val statusBarHeightMinus = ObservableInt(-statusBarHeight.get()) 17 | } -------------------------------------------------------------------------------- /lib/DevSimple/src/main/res/values/tools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | ¥ 10 | ¥17.2 11 | 17.2 12 | 17 13 | 14 | Title 15 | Value 16 | Name 17 | -------------------------------------------------------------------------------- /lib/DevWidget/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/DevWidget/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevWidgetX 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevWidgetX 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevWidgetX -------------------------------------------------------------------------------- /lib/DevWidget/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/DevWidget/src/main/res/animator/dev_flip_card_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 17 | -------------------------------------------------------------------------------- /lib/DevWidget/src/main/res/drawable/dev_scan_line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/DevWidget/src/main/res/drawable/dev_scan_line.png -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevEnvironment 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevEnvironment 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevEnvironment -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/java/dev/environment/RestartCallback.java: -------------------------------------------------------------------------------- 1 | package dev.environment; 2 | 3 | /** 4 | * detail: Restart Callback 5 | * @author Ttt 6 | */ 7 | public interface RestartCallback { 8 | 9 | void onRestart(); 10 | } -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/res/drawable/dev_environment_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/res/drawable/dev_environment_item_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/res/drawable/dev_environment_mark.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 重启 4 | 环境配置 5 | -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Restart 4 | Environment Config 5 | -------------------------------------------------------------------------------- /lib/Environment/DevEnvironment/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentBase/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentBase/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file(files.lib_java_gradle) 2 | 3 | version versions.dev_environment_base_version 4 | 5 | // 是否发布版本 6 | def isPublishing = false 7 | 8 | // tasks-build-assemble 9 | // publishing-publishReleasePublicationToXXXXXRepository 10 | //apply from: rootProject.file(files.bintray_upload_java) 11 | //apply from: rootProject.file(files.sonatype_upload_java) 12 | if (isPublishing) { 13 | apply from: rootProject.file(files.sonatype_upload_java) 14 | } -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentBase/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevEnvironmentBase 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevEnvironmentBase 5 | project.packaging=jar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevEnvironmentBase -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentBase/src/main/java/dev/environment/annotation/Module.java: -------------------------------------------------------------------------------- 1 | package dev.environment.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * detail: 模块 ( 注解标记类 ) 10 | * @author Ttt 11 | */ 12 | @Target(ElementType.TYPE) 13 | @Retention(RetentionPolicy.CLASS) 14 | public @interface Module { 15 | 16 | /** 17 | * 当前 {@link Module} 别名 18 | * @return {@link Module} 别名 19 | */ 20 | String alias() default ""; 21 | } -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentBase/src/main/java/dev/environment/listener/OnEnvironmentChangeListener.java: -------------------------------------------------------------------------------- 1 | package dev.environment.listener; 2 | 3 | import dev.environment.bean.EnvironmentBean; 4 | import dev.environment.bean.ModuleBean; 5 | 6 | /** 7 | * detail: 模块环境改变触发事件 8 | * @author Ttt 9 | */ 10 | public interface OnEnvironmentChangeListener { 11 | 12 | /** 13 | * 模块环境发生变化时触发 14 | * @param module 环境发生变化的模块 15 | * @param oldEnvironment 该模块的旧环境 16 | * @param newEnvironment 该模块的最新环境 17 | */ 18 | void onEnvironmentChanged( 19 | ModuleBean module, 20 | EnvironmentBean oldEnvironment, 21 | EnvironmentBean newEnvironment 22 | ); 23 | } -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentCompiler/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentCompiler/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevEnvironmentCompiler 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevEnvironmentCompiler 5 | project.packaging=jar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevEnvironmentCompiler -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentCompilerRelease/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/Environment/DevEnvironmentCompilerRelease/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevEnvironmentCompilerRelease 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevEnvironmentCompilerRelease 5 | project.packaging=jar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevEnvironmentCompilerRelease -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCapture/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCapture/proguard-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpCapture/DevHttpCapture/proguard-rules.pro -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCapture/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevHttpCapture 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevHttpCapture 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevHttpCapture -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCapture/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCapture/src/main/java/dev/capture/interceptor/SimpleInterceptor.kt: -------------------------------------------------------------------------------- 1 | package dev.capture.interceptor 2 | 3 | import dev.capture.CaptureInfo 4 | import dev.capture.interfaces.IHttpCaptureEnd 5 | 6 | /** 7 | * detail: 简单的抓包回调拦截器 ( 无存储逻辑 ) 8 | * @author Ttt 9 | * 继承 [CallbackInterceptor] 简化其他参数,直接回调抓包信息 [CaptureInfo] 10 | */ 11 | open class SimpleInterceptor( 12 | // Http 抓包结束回调 13 | _endCall: (CaptureInfo) -> Unit 14 | ) : CallbackInterceptor( 15 | endCall = object : IHttpCaptureEnd { 16 | override fun callEnd(info: CaptureInfo) { 17 | _endCall.invoke(info) 18 | } 19 | } 20 | ) -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/proguard-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpCapture/DevHttpCaptureCompiler/proguard-rules.pro -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevHttpCaptureCompiler 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevHttpCaptureCompiler 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevHttpCaptureCompiler -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/java/dev/capture/DevHttpCaptureToast.kt: -------------------------------------------------------------------------------- 1 | package dev.capture 2 | 3 | import androidx.annotation.StringRes 4 | 5 | /** 6 | * detail: 抓包库 Toast 7 | * @author Ttt 8 | */ 9 | interface DevHttpCaptureToast { 10 | 11 | /** 12 | * 默认提示 Toast 13 | * @param id R.string.id 14 | */ 15 | fun normal(@StringRes id: Int) 16 | 17 | /** 18 | * 操作成功 Toast 19 | * @param id R.string.id 20 | */ 21 | fun success(@StringRes id: Int) 22 | } -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/java/dev/capture/UrlFunctionGet.kt: -------------------------------------------------------------------------------- 1 | package dev.capture 2 | 3 | /** 4 | * detail: 接口所属功能注释获取 5 | * @author Ttt 6 | */ 7 | interface UrlFunctionGet { 8 | 9 | /** 10 | * 接口所属功能注释获取 11 | * @param moduleName 模块名 ( 要求唯一性 ) 12 | * @param url 原始请求链接 13 | * @param method 请求方法 14 | * @param convertUrlKey url 匹配规则 ( 拆分 ? 前为 key 进行匹配 ) 15 | * @param cacheFunction 缓存功能注释 16 | * @return 接口所属功能注释 17 | */ 18 | fun toUrlFunction( 19 | moduleName: String, 20 | url: String, 21 | method: String, 22 | convertUrlKey: String?, 23 | cacheFunction: String? 24 | ): String? 25 | } -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/java/dev/capture/base/BaseDevHttpViewHolder.kt: -------------------------------------------------------------------------------- 1 | package dev.capture.base 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import androidx.viewbinding.ViewBinding 5 | 6 | /** 7 | * detail: DevHttpCapture Base ViewHolder ViewBinding 8 | * @author Ttt 9 | */ 10 | internal class BaseDevHttpViewHolder( 11 | val binding: VB 12 | ) : RecyclerView.ViewHolder(binding.root) -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable-xxhdpi/dev_http_capture_icon_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable-xxhdpi/dev_http_capture_icon_refresh.png -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable-xxhdpi/dev_http_capture_icon_sort_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable-xxhdpi/dev_http_capture_icon_sort_arrow.png -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable-xxhdpi/dev_http_capture_icon_tips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable-xxhdpi/dev_http_capture_icon_tips.png -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable/dev_http_capture_action_round_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable/dev_http_capture_adapter_copy_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable/dev_http_capture_adapter_item_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable/dev_http_capture_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompiler/src/main/res/drawable/dev_http_capture_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompilerRelease/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompilerRelease/proguard-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpCapture/DevHttpCaptureCompilerRelease/proguard-rules.pro -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompilerRelease/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevHttpCaptureCompilerRelease 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevHttpCaptureCompilerRelease 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevHttpCaptureCompilerRelease -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompilerRelease/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/HttpCapture/DevHttpCaptureCompilerRelease/src/main/java/dev/capture/UrlFunctionGet.kt: -------------------------------------------------------------------------------- 1 | package dev.capture 2 | 3 | /** 4 | * detail: 接口所属功能注释获取 5 | * @author Ttt 6 | */ 7 | interface UrlFunctionGet { 8 | 9 | /** 10 | * 接口所属功能注释获取 11 | * @param moduleName 模块名 ( 要求唯一性 ) 12 | * @param url 原始请求链接 13 | * @param method 请求方法 14 | * @param convertUrlKey url 匹配规则 ( 拆分 ? 前为 key 进行匹配 ) 15 | * @param cacheFunction 缓存功能注释 16 | * @return 接口所属功能注释 17 | */ 18 | fun toUrlFunction( 19 | moduleName: String, 20 | url: String, 21 | method: String, 22 | convertUrlKey: String?, 23 | cacheFunction: String? 24 | ): String? 25 | } -------------------------------------------------------------------------------- /lib/HttpRequest/DevHttpManager/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/HttpRequest/DevHttpManager/proguard-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpRequest/DevHttpManager/proguard-rules.pro -------------------------------------------------------------------------------- /lib/HttpRequest/DevHttpManager/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevHttpManager 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevHttpManager 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevHttpManager -------------------------------------------------------------------------------- /lib/HttpRequest/DevHttpManager/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/HttpRequest/DevHttpManager/src/main/java/dev/http/manager/OkHttpBuilder.kt: -------------------------------------------------------------------------------- 1 | package dev.http.manager 2 | 3 | import okhttp3.OkHttpClient 4 | 5 | /** 6 | * detail: 全局 OkHttp Builder 接口 7 | * @author Ttt 8 | * 全局 ( 通过 Key 进行特殊化创建 ) 9 | * 可用于 [RetrofitBuilder.createRetrofitBuilder] okHttp 参数传入并创建 10 | */ 11 | interface OkHttpBuilder { 12 | 13 | /** 14 | * 创建 OkHttp Builder 15 | * @param key Key ( RetrofitBuilder Manager Key ) 16 | * @return OkHttpClient.Builder 17 | */ 18 | fun createOkHttpBuilder(key: String): OkHttpClient.Builder? 19 | } -------------------------------------------------------------------------------- /lib/HttpRequest/DevHttpManager/src/main/java/dev/http/manager/OnRetrofitResetListener.kt: -------------------------------------------------------------------------------- 1 | package dev.http.manager 2 | 3 | import retrofit2.Retrofit 4 | 5 | /** 6 | * detail: 全局 Retrofit 重新构建监听事件 7 | * @author Ttt 8 | */ 9 | interface OnRetrofitResetListener { 10 | 11 | /** 12 | * 重新构建前调用 13 | * @param key String 14 | * @param oldRetrofit 上一次构建的 Retrofit 15 | */ 16 | fun onResetBefore( 17 | key: String, 18 | oldRetrofit: Retrofit? 19 | ) 20 | 21 | /** 22 | * 重新构建后调用 23 | * @param key String 24 | * @param newRetrofit 重新构建的 Retrofit 对象 25 | * 在 [onResetBefore] 之后调用 26 | */ 27 | fun onReset( 28 | key: String, 29 | newRetrofit: Retrofit? 30 | ) 31 | } -------------------------------------------------------------------------------- /lib/HttpRequest/DevRetrofit/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib/HttpRequest/DevRetrofit/proguard-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afkT/DevUtils/409f683ec2b2e1b1928f098cbdf510fb4aba094f/lib/HttpRequest/DevRetrofit/proguard-rules.pro -------------------------------------------------------------------------------- /lib/HttpRequest/DevRetrofit/project.properties: -------------------------------------------------------------------------------- 1 | #project 2 | project.name=DevRetrofit 3 | project.groupId=io.github.afkt 4 | project.artifactId=DevRetrofit 5 | project.packaging=aar 6 | project.siteUrl=https://github.com/afkT/DevUtils 7 | project.gitUrl=https://github.com/afkT/DevUtils.git 8 | 9 | #javadoc 10 | javadoc.name=DevRetrofit -------------------------------------------------------------------------------- /lib/HttpRequest/DevRetrofit/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sonatype.properties: -------------------------------------------------------------------------------- 1 | #sonatype 2 | signing.keyId= 3 | signing.password= 4 | signing.secretKeyRingFile=../../File/SonaType/devuitls/devutils_android.gpg 5 | ossrhUsername=jtongttt 6 | ossrhPassword= 7 | 8 | #developer 9 | developer.id=jtongttt 10 | developer.name=ChenJiaTong 11 | developer.email=jtongttt@gmail.com --------------------------------------------------------------------------------