├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── bug_report_cn.md │ ├── feature-request.md │ └── feature-request_cn.md └── workflows │ └── android.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README-CN.md ├── README.md ├── art ├── auc_frame.png ├── auc_frame_cn.png ├── busutil_vs_eventbus.png ├── communication.png ├── donate.png └── logo.png ├── build.gradle ├── buildApp.gradle ├── buildCommon.gradle ├── buildLib.gradle ├── buildSrc ├── .gitignore ├── build.gradle ├── settings.gradle └── src │ └── main │ ├── groovy │ ├── Config.groovy │ ├── ConfigUtils.groovy │ ├── GLog.groovy │ ├── LibConfig.groovy │ ├── ModuleConfig.groovy │ ├── PluginConfig.groovy │ └── TaskDurationUtils.groovy │ └── java │ └── com │ └── blankj │ └── plugin │ └── readme │ ├── FormatUtils.groovy │ ├── ReadmeCorePlugin.groovy │ ├── ReadmeExtension.groovy │ └── ReadmeSubPlugin.groovy ├── config ├── flavor.gradle └── publish.gradle ├── feature ├── launcher │ └── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── blankj │ │ └── launcher │ │ └── app │ │ └── LauncherApp.java ├── main │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── blankj │ │ │ └── main │ │ │ └── app │ │ │ └── MainApp.java │ └── pkg │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── blankj │ │ │ └── main │ │ │ └── pkg │ │ │ ├── MainActivity.kt │ │ │ └── SplashActivity.kt │ │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ └── values │ │ └── strings.xml ├── mock │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── blankj │ │ └── mock │ │ ├── subutil │ │ └── SubUtilApiMock.java │ │ └── utilcode │ │ └── UtilCodeApiMock.java ├── subutil │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── blankj │ │ │ └── subutil │ │ │ └── app │ │ │ └── SubUtilApp.kt │ ├── export │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── blankj │ │ │ └── subutil │ │ │ └── export │ │ │ └── api │ │ │ └── SubUtilApi.java │ └── pkg │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── blankj │ │ │ └── subutil │ │ │ └── pkg │ │ │ ├── Config.kt │ │ │ ├── SubUtilApiImpl.java │ │ │ └── feature │ │ │ ├── SubUtilActivity.kt │ │ │ ├── appStore │ │ │ └── AppStoreActivity.kt │ │ │ ├── battery │ │ │ └── BatteryActivity.kt │ │ │ ├── country │ │ │ └── CountryActivity.kt │ │ │ ├── dangerous │ │ │ └── DangerousActivity.kt │ │ │ ├── location │ │ │ ├── LocationActivity.kt │ │ │ └── LocationService.kt │ │ │ └── pinyin │ │ │ └── PinyinActivity.kt │ │ └── res │ │ └── values │ │ └── strings.xml └── utilcode │ ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── blankj │ │ └── utilcode │ │ └── app │ │ └── UtilCodeApp.kt │ ├── export │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── blankj │ │ └── utilcode │ │ └── export │ │ └── api │ │ └── UtilCodeApi.java │ └── pkg │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── fonts │ │ └── dnmbhs.ttf │ └── test │ │ ├── sub │ │ └── test.txt │ │ └── test.txt │ ├── java │ └── com │ │ └── blankj │ │ └── utilcode │ │ └── pkg │ │ ├── Config.kt │ │ ├── UtilCodeApiImpl.java │ │ ├── feature │ │ ├── CoreUtilActivity.kt │ │ ├── activity │ │ │ ├── ActivityActivity.kt │ │ │ └── SubActivityActivity.kt │ │ ├── adaptScreen │ │ │ ├── AdaptCloseActivity.kt │ │ │ ├── AdaptHeightActivity.kt │ │ │ ├── AdaptScreenActivity.kt │ │ │ └── AdaptWidthActivity.kt │ │ ├── api │ │ │ ├── ApiActivity.kt │ │ │ └── other │ │ │ │ ├── export │ │ │ │ └── OtherModuleApi.java │ │ │ │ └── pkg │ │ │ │ └── OtherPkgApiImpl.java │ │ ├── app │ │ │ └── AppActivity.kt │ │ ├── bar │ │ │ ├── BarActivity.kt │ │ │ ├── nav │ │ │ │ └── BarNavActivity.kt │ │ │ ├── notification │ │ │ │ └── BarNotificationActivity.kt │ │ │ └── status │ │ │ │ ├── BarStatusActivity.kt │ │ │ │ ├── BarStatusActivityAlpha.kt │ │ │ │ ├── BarStatusActivityColor.kt │ │ │ │ ├── BarStatusActivityCustom.kt │ │ │ │ ├── BarStatusActivityDrawer.kt │ │ │ │ ├── BarStatusActivityImageView.kt │ │ │ │ └── fragment │ │ │ │ ├── BarStatusFragmentActivity.kt │ │ │ │ ├── BarStatusFragmentAlpha.kt │ │ │ │ ├── BarStatusFragmentColor.kt │ │ │ │ ├── BarStatusFragmentCustom.kt │ │ │ │ └── BarStatusFragmentImageView.kt │ │ ├── brightness │ │ │ └── BrightnessActivity.kt │ │ ├── bus │ │ │ ├── BusActivity.kt │ │ │ └── BusCompareActivity.kt │ │ ├── clean │ │ │ └── CleanActivity.kt │ │ ├── click │ │ │ └── ClickActivity.kt │ │ ├── clipboard │ │ │ └── ClipboardActivity.kt │ │ ├── device │ │ │ └── DeviceActivity.kt │ │ ├── file │ │ │ └── FileActivity.kt │ │ ├── flashlight │ │ │ └── FlashlightActivity.kt │ │ ├── fragment │ │ │ ├── ChildFragment.kt │ │ │ ├── ContainerFragment.kt │ │ │ ├── FragmentActivity.kt │ │ │ └── RootFragment.kt │ │ ├── image │ │ │ └── ImageActivity.kt │ │ ├── intent │ │ │ └── IntentActivity.kt │ │ ├── keyboard │ │ │ └── KeyboardActivity.kt │ │ ├── language │ │ │ └── LanguageActivity.kt │ │ ├── log │ │ │ └── LogActivity.kt │ │ ├── messenger │ │ │ ├── MessengerActivity.kt │ │ │ └── MessengerRemoteActivity.kt │ │ ├── metaData │ │ │ └── MetaDataActivity.kt │ │ ├── mvp │ │ │ ├── MvpActivity.java │ │ │ ├── MvpModel.java │ │ │ ├── MvpMvp.java │ │ │ ├── MvpPresenter.java │ │ │ └── MvpView.java │ │ ├── network │ │ │ └── NetworkActivity.kt │ │ ├── notification │ │ │ └── NotificationActivity.kt │ │ ├── path │ │ │ └── PathActivity.kt │ │ ├── permission │ │ │ └── PermissionActivity.kt │ │ ├── phone │ │ │ └── PhoneActivity.kt │ │ ├── process │ │ │ └── ProcessActivity.kt │ │ ├── reflect │ │ │ ├── ReflectActivity.kt │ │ │ └── TestPrivateStaticFinal.java │ │ ├── resource │ │ │ └── ResourceActivity.kt │ │ ├── rom │ │ │ └── RomActivity.kt │ │ ├── screen │ │ │ └── ScreenActivity.kt │ │ ├── sdcard │ │ │ └── SDCardActivity.kt │ │ ├── shadow │ │ │ └── ShadowActivity.kt │ │ ├── snackbar │ │ │ └── SnackbarActivity.kt │ │ ├── spStatic │ │ │ └── SPStaticActivity.kt │ │ ├── span │ │ │ └── SpanActivity.kt │ │ ├── toast │ │ │ ├── CustomToast.kt │ │ │ └── ToastActivity.kt │ │ ├── uiMessage │ │ │ └── UiMessageActivity.kt │ │ ├── vibrate │ │ │ └── VibrateActivity.kt │ │ └── volume │ │ │ └── VolumeActivity.kt │ │ └── helper │ │ └── DialogHelper.kt │ └── res │ ├── anim │ ├── fade_in_1000.xml │ ├── fade_out_1000.xml │ ├── slide_bottom_in_200.xml │ ├── slide_bottom_out_200.xml │ ├── slide_left_out_1000.xml │ └── slide_right_in_1000.xml │ ├── animator │ ├── fragment_slide_left_enter.xml │ ├── fragment_slide_left_exit.xml │ ├── fragment_slide_right_enter.xml │ └── fragment_slide_right_exit.xml │ ├── drawable │ ├── activity_activity_icon.png │ ├── activity_activity_logo.png │ ├── bar_status_custom.xml │ ├── bar_status_nav_alpha.xml │ ├── bar_status_nav_color.xml │ ├── bar_status_nav_custom.xml │ ├── bar_status_nav_image.xml │ ├── fragment_nav.xml │ ├── image_lena.jpg │ ├── keyboard_dialog_bg.xml │ ├── shadow_circle.xml │ ├── shadow_round_rect.xml │ ├── snackbar_custom_bg.xml │ ├── span_block_high.xml │ ├── span_block_low.xml │ ├── span_cheetah.png │ └── toast_round_rect.xml │ ├── layout │ ├── activity_adaptscreen.xml │ ├── activity_item_shared_element_activity.xml │ ├── activity_sub_activity.xml │ ├── adaptscreen_close_activity.xml │ ├── adaptscreen_height_activity.xml │ ├── adaptscreen_width_activity.xml │ ├── bar_status_alpha_activity.xml │ ├── bar_status_alpha_fragment.xml │ ├── bar_status_color_fragment.xml │ ├── bar_status_custom_fragment.xml │ ├── bar_status_drawer_activity.xml │ ├── bar_status_fragment_activity.xml │ ├── bar_status_image_view_activity.xml │ ├── bar_status_image_view_fragment.xml │ ├── fragment_activity.xml │ ├── fragment_child.xml │ ├── fragment_container.xml │ ├── fragment_dialog.xml │ ├── fragment_item_shared_element.xml │ ├── fragment_root.xml │ ├── keyboard_activity.xml │ ├── keyboard_dialog.xml │ ├── mvp_activity.xml │ ├── screen_dialog.xml │ ├── shadow_activity.xml │ ├── snackbar_custom.xml │ ├── span_activity.xml │ ├── toast_custom.xml │ └── toast_dialog.xml │ ├── menu │ ├── fragment_nav.xml │ └── status_bar_nav.xml │ ├── raw │ └── test.txt │ ├── transition │ ├── explode_1000.xml │ ├── fade_1000.xml │ └── slide_1000.xml │ ├── values-en-rUS │ └── strings.xml │ ├── values-zh-rCN │ └── strings.xml │ └── values │ ├── ids.xml │ ├── strings.xml │ └── styles.xml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lib ├── base │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── blankj │ │ │ └── base │ │ │ ├── BaseActivity.java │ │ │ ├── BaseApplication.java │ │ │ ├── BaseFragment.java │ │ │ ├── IBaseView.java │ │ │ ├── dialog │ │ │ ├── BaseDialog.java │ │ │ ├── BaseDialogFragment.java │ │ │ ├── DialogCallback.java │ │ │ └── DialogLayoutCallback.java │ │ │ ├── mvp │ │ │ ├── BaseModel.java │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── rv │ │ │ ├── BaseItem.java │ │ │ ├── BaseItemAdapter.java │ │ │ ├── ItemViewHolder.java │ │ │ └── RecycleViewDivider.java │ │ │ └── view │ │ │ └── EmptyGoneTextView.java │ │ └── res │ │ └── layout │ │ ├── activity_back.xml │ │ └── fragment_lazy.xml ├── common │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── test_install │ │ ├── java │ │ └── com │ │ │ └── blankj │ │ │ └── common │ │ │ ├── CommonApplication.java │ │ │ ├── activity │ │ │ ├── CommonActivity.java │ │ │ ├── CommonActivityDrawerView.java │ │ │ ├── CommonActivityItemsView.java │ │ │ └── CommonActivityTitleView.java │ │ │ ├── dialog │ │ │ ├── CommonDialogContent.java │ │ │ └── CommonDialogLoading.java │ │ │ ├── fragment │ │ │ └── CommonFragment.java │ │ │ ├── helper │ │ │ └── PermissionHelper.kt │ │ │ ├── item │ │ │ ├── CommonItem.java │ │ │ ├── CommonItemClick.java │ │ │ ├── CommonItemImage.java │ │ │ ├── CommonItemSeekBar.java │ │ │ ├── CommonItemSwitch.java │ │ │ └── CommonItemTitle.java │ │ │ └── view │ │ │ └── RotateView.java │ │ └── res │ │ ├── anim │ │ ├── slide_in_left.xml │ │ ├── slide_in_right.xml │ │ ├── slide_out_left.xml │ │ └── slide_out_right.xml │ │ ├── drawable-xxhdpi │ │ ├── common_avatar_round.png │ │ ├── common_bg_header.jpeg │ │ ├── common_ic_item_go.png │ │ ├── common_loading.png │ │ ├── common_switch_thumb.xml │ │ └── common_switch_track.xml │ │ ├── drawable │ │ ├── common_back.png │ │ ├── common_button_bg.xml │ │ ├── common_button_txt_color.xml │ │ ├── common_content_dialog_bg.xml │ │ ├── common_content_dialog_btn_bg.xml │ │ ├── common_item_divider.xml │ │ ├── common_loading_bg.xml │ │ ├── common_rotate_loading.xml │ │ ├── common_scrollbar_thumb.xml │ │ ├── common_seekbar_progress.xml │ │ ├── common_seekbar_thumb.xml │ │ ├── common_splash.xml │ │ ├── main_menu_blog.xml │ │ └── main_menu_github.xml │ │ ├── layout │ │ ├── common_activity_drawer.xml │ │ ├── common_activity_drawer_nav_header.xml │ │ ├── common_activity_title.xml │ │ ├── common_activity_title_stub_no_scroll.xml │ │ ├── common_activity_title_stub_scroll.xml │ │ ├── common_dialog_content.xml │ │ ├── common_dialog_loading.xml │ │ ├── common_item.xml │ │ ├── common_item_title_click.xml │ │ ├── common_item_title_content.xml │ │ ├── common_item_title_image.xml │ │ ├── common_item_title_seekbar.xml │ │ └── common_item_title_switch.xml │ │ ├── menu │ │ └── common_drawer.xml │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml ├── subutil │ ├── .gitignore │ ├── README-CN.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── blankj │ │ │ └── subutil │ │ │ └── util │ │ │ ├── AppStoreUtils.java │ │ │ ├── BatteryUtils.java │ │ │ ├── BitUtils.java │ │ │ ├── CameraUtils.java │ │ │ ├── CoordinateUtils.java │ │ │ ├── CountryUtils.java │ │ │ ├── DangerousUtils.java │ │ │ ├── GlideUtils.java │ │ │ ├── HttpsUtil.java │ │ │ ├── LocationUtils.java │ │ │ ├── LunarUtils.java │ │ │ ├── PinyinUtils.java │ │ │ ├── RetrofitUtils.java │ │ │ ├── TemperatureUtils.java │ │ │ ├── Utils.java │ │ │ └── http │ │ │ ├── Chain.java │ │ │ ├── ExecutorFactory.java │ │ │ ├── Headers.java │ │ │ ├── HttpUtils.java │ │ │ ├── Interceptor.java │ │ │ ├── Request.java │ │ │ ├── Response.java │ │ │ ├── ResponseCallback.java │ │ │ └── SSLConfig.java │ │ └── test │ │ └── java │ │ └── com │ │ └── blankj │ │ └── subutil │ │ └── util │ │ ├── BaseTest.java │ │ ├── CoordinateUtilsTest.java │ │ ├── LunarUtilsTest.java │ │ ├── TemperatureUtilsTest.java │ │ ├── TestConfig.java │ │ └── http │ │ ├── HttpUtilsTest.java │ │ └── UserBean.java ├── utilcode │ ├── .gitignore │ ├── README-CN.md │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── blankj │ │ │ │ └── utilcode │ │ │ │ ├── constant │ │ │ │ ├── CacheConstants.java │ │ │ │ ├── MemoryConstants.java │ │ │ │ ├── PermissionConstants.java │ │ │ │ ├── RegexConstants.java │ │ │ │ └── TimeConstants.java │ │ │ │ └── util │ │ │ │ ├── ActivityUtils.java │ │ │ │ ├── AdaptScreenUtils.java │ │ │ │ ├── ApiUtils.java │ │ │ │ ├── AppUtils.java │ │ │ │ ├── ArrayUtils.java │ │ │ │ ├── BarUtils.java │ │ │ │ ├── BrightnessUtils.java │ │ │ │ ├── BusUtils.java │ │ │ │ ├── CacheDiskStaticUtils.java │ │ │ │ ├── CacheDiskUtils.java │ │ │ │ ├── CacheDoubleStaticUtils.java │ │ │ │ ├── CacheDoubleUtils.java │ │ │ │ ├── CacheMemoryStaticUtils.java │ │ │ │ ├── CacheMemoryUtils.java │ │ │ │ ├── CleanUtils.java │ │ │ │ ├── ClickUtils.java │ │ │ │ ├── ClipboardUtils.java │ │ │ │ ├── CloneUtils.java │ │ │ │ ├── CloseUtils.java │ │ │ │ ├── CollectionUtils.java │ │ │ │ ├── ColorUtils.java │ │ │ │ ├── ConvertUtils.java │ │ │ │ ├── CrashUtils.java │ │ │ │ ├── DebouncingUtils.java │ │ │ │ ├── DeviceUtils.java │ │ │ │ ├── DialogUtils.java │ │ │ │ ├── EncodeUtils.java │ │ │ │ ├── EncryptUtils.java │ │ │ │ ├── FileIOUtils.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── FlashlightUtils.java │ │ │ │ ├── FragmentUtils.java │ │ │ │ ├── GsonUtils.java │ │ │ │ ├── ImageUtils.java │ │ │ │ ├── IntentUtils.java │ │ │ │ ├── JsonUtils.java │ │ │ │ ├── KeyboardUtils.java │ │ │ │ ├── LanguageUtils.java │ │ │ │ ├── LogUtils.java │ │ │ │ ├── MapUtils.java │ │ │ │ ├── MessengerUtils.java │ │ │ │ ├── MetaDataUtils.java │ │ │ │ ├── NetworkUtils.java │ │ │ │ ├── NotificationUtils.java │ │ │ │ ├── NumberUtils.java │ │ │ │ ├── ObjectUtils.java │ │ │ │ ├── PathUtils.java │ │ │ │ ├── PermissionUtils.java │ │ │ │ ├── PhoneUtils.java │ │ │ │ ├── ProcessUtils.java │ │ │ │ ├── ReflectUtils.java │ │ │ │ ├── RegexUtils.java │ │ │ │ ├── ResourceUtils.java │ │ │ │ ├── RomUtils.java │ │ │ │ ├── SDCardUtils.java │ │ │ │ ├── SPStaticUtils.java │ │ │ │ ├── SPUtils.java │ │ │ │ ├── ScreenUtils.java │ │ │ │ ├── ServiceUtils.java │ │ │ │ ├── ShadowUtils.java │ │ │ │ ├── ShellUtils.java │ │ │ │ ├── SizeUtils.java │ │ │ │ ├── SnackbarUtils.java │ │ │ │ ├── SpanUtils.java │ │ │ │ ├── StringUtils.java │ │ │ │ ├── ThreadUtils.java │ │ │ │ ├── ThrowableUtils.java │ │ │ │ ├── TimeUtils.java │ │ │ │ ├── ToastUtils.java │ │ │ │ ├── TouchUtils.java │ │ │ │ ├── UiMessageUtils.java │ │ │ │ ├── UriUtils.java │ │ │ │ ├── Utils.java │ │ │ │ ├── UtilsActivityLifecycleImpl.java │ │ │ │ ├── UtilsBridge.java │ │ │ │ ├── UtilsFileProvider.java │ │ │ │ ├── UtilsTransActivity.java │ │ │ │ ├── UtilsTransActivity4MainProcess.java │ │ │ │ ├── VibrateUtils.java │ │ │ │ ├── ViewUtils.java │ │ │ │ ├── VolumeUtils.java │ │ │ │ └── ZipUtils.java │ │ └── res │ │ │ ├── drawable │ │ │ └── utils_toast_bg.xml │ │ │ ├── layout │ │ │ └── utils_toast_view.xml │ │ │ ├── values-v21 │ │ │ └── styles.xml │ │ │ ├── values │ │ │ └── styles.xml │ │ │ └── xml │ │ │ └── util_code_provider_paths.xml │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── blankj │ │ │ └── utilcode │ │ │ └── util │ │ │ ├── ApiUtilsTest.java │ │ │ ├── ArrayUtilsTest.java │ │ │ ├── BaseTest.java │ │ │ ├── BusUtilsTest.java │ │ │ ├── BusUtilsVsEventBusTest.java │ │ │ ├── CacheDiskStaticUtilsTest.java │ │ │ ├── CacheDiskUtilsTest.java │ │ │ ├── CacheDoubleStaticUtilsTest.java │ │ │ ├── CacheDoubleUtilsTest.java │ │ │ ├── CacheMemoryStaticUtilsTest.java │ │ │ ├── CacheMemoryUtilsTest.java │ │ │ ├── CloneUtilsTest.java │ │ │ ├── CollectionUtilsTest.java │ │ │ ├── ColorUtilsTest.java │ │ │ ├── ConvertUtilsTest.java │ │ │ ├── EncodeUtilsTest.java │ │ │ ├── EncryptUtilsTest.java │ │ │ ├── FileIOUtilsTest.java │ │ │ ├── FileUtilsTest.java │ │ │ ├── GsonUtilsTest.java │ │ │ ├── ImageUtilsTest.java │ │ │ ├── LogUtilsTest.java │ │ │ ├── MapUtilsTest.java │ │ │ ├── NumberUtilsTest.java │ │ │ ├── ObjectUtilsTest.java │ │ │ ├── PathUtilsTest.java │ │ │ ├── RegexUtilsTest.java │ │ │ ├── StringUtilsTest.java │ │ │ ├── TestConfig.java │ │ │ ├── ThreadUtilsTest.java │ │ │ ├── TimeUtilsTest.java │ │ │ ├── UiMessageUtilsTest.java │ │ │ ├── ZipUtilsTest.java │ │ │ └── reflect │ │ │ ├── PrivateConstructors.java │ │ │ ├── ReflectUtilsTest.java │ │ │ ├── Test1.java │ │ │ ├── Test10.java │ │ │ ├── Test2.java │ │ │ ├── Test3.java │ │ │ ├── Test4.java │ │ │ ├── Test5.java │ │ │ ├── Test6.java │ │ │ ├── Test7.java │ │ │ ├── Test8.java │ │ │ ├── Test9.java │ │ │ ├── TestHierarchicalMethodsBase.java │ │ │ ├── TestHierarchicalMethodsSubclass.java │ │ │ └── TestPrivateStaticFinal.java │ │ └── res │ │ ├── encrypt │ │ └── MD5.txt │ │ ├── file │ │ ├── GBK.txt │ │ ├── UTF16BE.txt │ │ ├── UTF8.txt │ │ ├── Unicode.txt │ │ └── recuresive │ │ │ └── UTF8.txt │ │ ├── image │ │ ├── ic_launcher.bmp │ │ ├── ic_launcher.gif │ │ ├── ic_launcher.ico │ │ ├── ic_launcher.jpg │ │ ├── ic_launcher.png │ │ ├── ic_launcher.tif │ │ └── ic_launcher.webp │ │ └── zip │ │ ├── test.txt │ │ ├── testDir │ │ └── test.txt │ │ ├── 测试.txt │ │ └── 测试文件夹 │ │ └── 测试.txt ├── utildebug-no-op │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── blankj │ │ └── utildebug │ │ ├── DebugUtils.java │ │ └── debug │ │ └── IDebug.java └── utildebug │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── blankj │ │ └── utildebug │ │ ├── DebugUtils.java │ │ ├── base │ │ ├── drawable │ │ │ └── PolygonDrawable.java │ │ ├── rv │ │ │ ├── BaseItem.java │ │ │ ├── BaseItemAdapter.java │ │ │ ├── ItemViewHolder.java │ │ │ └── RecycleViewDivider.java │ │ └── view │ │ │ ├── BaseContentFloatView.java │ │ │ ├── BaseContentView.java │ │ │ ├── BaseFloatView.java │ │ │ ├── EmptyGoneTextView.java │ │ │ ├── FloatEditText.java │ │ │ ├── FloatToast.java │ │ │ ├── FloatViewManager.java │ │ │ ├── SearchEditText.java │ │ │ ├── SwipeRightMenu.java │ │ │ └── listener │ │ │ ├── OnBackListener.java │ │ │ └── OnRefreshListener.java │ │ ├── config │ │ └── DebugConfig.java │ │ ├── debug │ │ ├── IDebug.java │ │ └── tool │ │ │ ├── AbsToolDebug.java │ │ │ ├── appInfo │ │ │ ├── AppInfoDebug.java │ │ │ ├── AppInfoFloatView.java │ │ │ └── AppInfoItem.java │ │ │ ├── clearCache │ │ │ └── ClearCacheDebug.java │ │ │ ├── clearStorage │ │ │ └── ClearStorageDebug.java │ │ │ ├── deviceInfo │ │ │ ├── DeviceInfoDebug.java │ │ │ ├── DeviceInfoFloatView.java │ │ │ └── DeviceInfoItem.java │ │ │ ├── fileExplorer │ │ │ ├── FileContentView.java │ │ │ ├── FileExplorerDebug.java │ │ │ ├── FileExplorerFloatView.java │ │ │ ├── FileItem.java │ │ │ ├── image │ │ │ │ └── ImageViewer.java │ │ │ ├── sp │ │ │ │ ├── SpItem.java │ │ │ │ ├── SpModifyContentView.java │ │ │ │ └── SpViewerContentView.java │ │ │ └── text │ │ │ │ └── TextViewer.java │ │ │ ├── logcat │ │ │ └── LogcatDebug.java │ │ │ └── restartApp │ │ │ └── RestartAppDebug.java │ │ ├── helper │ │ ├── FileHelper.java │ │ ├── ImageLoader.java │ │ ├── ShadowHelper.java │ │ ├── SpHelper.java │ │ └── WindowHelper.java │ │ ├── icon │ │ └── DebugIcon.java │ │ └── menu │ │ ├── DebugItem.java │ │ ├── DebugMenu.java │ │ ├── DebugMenuItem.java │ │ └── ReminderView.java │ └── res │ ├── anim │ ├── float_in.xml │ └── float_out.xml │ ├── drawable-xxhdpi │ ├── du_ic_debug_app_info_default.png │ ├── du_ic_debug_clear_cache.png │ ├── du_ic_debug_clear_storage.png │ ├── du_ic_debug_device_info.png │ ├── du_ic_debug_file_explorer.png │ ├── du_ic_debug_logcat.png │ ├── du_ic_debug_restart_app.png │ ├── du_ic_icon_default.png │ ├── du_ic_item_file_default.png │ ├── du_ic_item_file_sp.png │ ├── du_ic_item_file_utf8.png │ ├── du_ic_item_go.png │ ├── du_ic_reminder.png │ ├── du_ic_swipe_back.png │ ├── du_ic_swipe_refresh.png │ ├── du_ic_title_bar_adjustable.png │ ├── du_ic_title_bar_close.png │ ├── du_ic_toast_error.png │ ├── du_ic_toast_success.png │ └── du_ic_toast_warn.png │ ├── drawable │ ├── du_rotate_refresh.xml │ ├── du_sel_et_bg.xml │ ├── du_shape_base_float_bg.xml │ ├── du_shape_base_float_title_adjust_bg.xml │ ├── du_shape_base_float_title_bg.xml │ ├── du_shape_base_float_title_close_bg.xml │ ├── du_shape_btn.xml │ ├── du_shape_divider.xml │ ├── du_shape_file_divider.xml │ ├── du_shape_input_bg.xml │ ├── du_shape_item_menu_bg.xml │ ├── du_shape_positive_btn.xml │ ├── du_shape_shadow.xml │ ├── du_shape_toast.xml │ ├── du_switch_thumb.xml │ └── du_switch_track.xml │ ├── layout │ ├── du_base_content_float.xml │ ├── du_debug_app_info.xml │ ├── du_debug_device_info.xml │ ├── du_debug_file_explorer.xml │ ├── du_debug_file_explorer_image.xml │ ├── du_debug_file_explorer_sp.xml │ ├── du_debug_file_explorer_sp_modify.xml │ ├── du_debug_icon.xml │ ├── du_debug_menu.xml │ ├── du_float_toast.xml │ ├── du_item_base_info.xml │ ├── du_item_empty.xml │ ├── du_item_file.xml │ ├── du_item_menu.xml │ ├── du_item_menu_item.xml │ ├── du_item_sp.xml │ └── du_reminder_view.xml │ ├── values-zh-rCN │ └── strings.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml ├── module_config.gradle ├── module_config.json ├── plugin ├── api-gradle-plugin │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── blankj │ │ │ └── api │ │ │ ├── ApiClassVisitor.java │ │ │ ├── ApiExtension.groovy │ │ │ ├── ApiInfo.java │ │ │ ├── ApiInject.groovy │ │ │ ├── ApiPlugin.groovy │ │ │ ├── ApiUtilsClassVisitor.java │ │ │ └── Config.groovy │ │ └── test │ │ └── java │ │ └── com │ │ └── blankj │ │ └── api │ │ ├── ApiTest.java │ │ └── ApiUtils.java ├── buildSrc-plugin │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── blankj │ │ └── buildSrc │ │ ├── BuildSrcPlugin.groovy │ │ └── ModuleCfg.groovy ├── bus-gradle-plugin │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── blankj │ │ │ └── bus │ │ │ ├── BusClassVisitor.java │ │ │ ├── BusExtension.groovy │ │ │ ├── BusInfo.java │ │ │ ├── BusInject.groovy │ │ │ ├── BusPlugin.groovy │ │ │ ├── BusUtilsClassVisitor.java │ │ │ └── Config.groovy │ │ └── test │ │ └── java │ │ └── com │ │ └── blankj │ │ └── bus │ │ ├── BusTest.java │ │ └── BusUtils.java └── lib │ └── base-transform │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle │ └── src │ └── main │ └── java │ └── com │ └── blankj │ └── base_transform │ ├── BaseTransformCallback.groovy │ ├── BaseTransformConfig.groovy │ ├── BaseTransformPlugin.groovy │ └── util │ ├── JsonUtils.groovy │ ├── LogUtils.groovy │ └── ZipUtils.java ├── script ├── gitHelp.sh ├── runDevDebug.sh └── runProductionRelease.sh ├── settings.gradle └── sign ├── keystore.jks └── keystore.properties /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/donate.png 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report_cn.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 提交 Bug 3 | about: 让工具类更完美! 4 | labels: bug 5 | assignees: Blankj 6 | 7 | --- 8 | 9 | ## 描述 Bug 10 | 11 | 简洁地描述下 Bug。 12 | 13 | - AndroidUtilCode 的版本: 14 | - 出现 Bug 的设备型号: 15 | - 设备的 Android 版本: 16 | 17 | ## 相关代码 18 | 19 | 24 | ``` 25 | put your code here 26 | ``` 27 | 28 | ## 异常堆栈 29 | 30 | 40 | 41 | ``` 42 | put the stack of crash here 43 | ``` 44 | 45 | ## 截图 46 | 47 | 如果有的话请添加屏幕截图以帮助解释问题。 48 | 49 | 50 | ## 请删除当前行及以下内容 51 | 52 | 感谢支持 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). 53 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Make AndroidUtilCode more perfect! 4 | labels: help wanted 5 | assignees: Blankj 6 | 7 | --- 8 | 9 | ## Describe the feature 10 | 11 | A clear and concise description of what the feature is. 12 | 13 | 14 | ## Reference 15 | 16 | Hope to give some reference articles, links, code, if any. 17 | 18 | 19 | ## Please delete the current line and the following 20 | 21 | Thank you for supporting [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request_cn.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 提交需求 3 | about: 让工具类更健全! 4 | labels: help wanted 5 | assignees: Blankj 6 | 7 | --- 8 | 9 | ## 描述需求 10 | 11 | 简洁地描述下需求。 12 | 13 | 14 | ## 可借鉴的 15 | 16 | 如果有的话,可以给出一些参考文章、链接、代码 17 | 18 | 19 | ## 请删除当前行及以下内容 20 | 21 | 感谢支持 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). 22 | -------------------------------------------------------------------------------- /.github/workflows/android.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v2 12 | - name: set up JDK 1.8 13 | uses: actions/setup-java@v1 14 | with: 15 | java-version: 1.8 16 | - name: Build with Gradle 17 | run: ./gradlew build aR 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | __api__.json 3 | __bus__.json 4 | .gradle 5 | local.properties 6 | .idea 7 | .DS_Store 8 | /build 9 | /captures 10 | .externalNativeBuild 11 | /apk 12 | *.phrof 13 | /mavenLocal 14 | /reports 15 | */reports -------------------------------------------------------------------------------- /art/auc_frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/art/auc_frame.png -------------------------------------------------------------------------------- /art/auc_frame_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/art/auc_frame_cn.png -------------------------------------------------------------------------------- /art/busutil_vs_eventbus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/art/busutil_vs_eventbus.png -------------------------------------------------------------------------------- /art/communication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/art/communication.png -------------------------------------------------------------------------------- /art/donate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/art/donate.png -------------------------------------------------------------------------------- /art/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/art/logo.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | ConfigUtils.init(gradle) 4 | repositories { 5 | mavenLocal() 6 | google() 7 | mavenCentral() 8 | jcenter() 9 | } 10 | 11 | dependencies { 12 | for (def entrySet : ConfigUtils.getApplyPlugins().entrySet()) { 13 | classpath entrySet.value.path 14 | } 15 | } 16 | } 17 | 18 | allprojects { 19 | repositories { 20 | mavenLocal() 21 | maven { url "https://jitpack.io" } 22 | google() 23 | mavenCentral() 24 | jcenter() 25 | } 26 | 27 | configurations.all { 28 | resolutionStrategy.cacheChangingModulesFor 0, 'seconds' 29 | 30 | resolutionStrategy.eachDependency { 31 | if (it.requested.group == 'com.android.support' && !it.requested.name.contains( 32 | 'multidex')) { 33 | it.useVersion Config.supportVersion 34 | } 35 | } 36 | } 37 | } 38 | 39 | task clean(type: Delete) { 40 | delete rootProject.buildDir 41 | } -------------------------------------------------------------------------------- /buildCommon.gradle: -------------------------------------------------------------------------------- 1 | apply { 2 | plugin "kotlin-android" 3 | plugin "kotlin-android-extensions" 4 | } 5 | 6 | android { 7 | compileSdkVersion Config.compileSdkVersion 8 | defaultConfig { 9 | minSdkVersion Config.minSdkVersion 10 | versionCode Config.versionCode 11 | versionName Config.versionName 12 | consumerProguardFiles 'proguard-rules.pro' 13 | } 14 | 15 | buildTypes { 16 | release { 17 | minifyEnabled true 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | 22 | compileOptions { 23 | sourceCompatibility JavaVersion.VERSION_1_8 24 | targetCompatibility JavaVersion.VERSION_1_8 25 | } 26 | 27 | lintOptions { 28 | abortOnError false 29 | } 30 | } -------------------------------------------------------------------------------- /buildLib.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.library" 2 | apply from: "${rootDir.path}/buildCommon.gradle" 3 | 4 | dependencies { 5 | if (project.name.endsWith("_pkg") || project.name.endsWith("_mock")) { 6 | // if module's name equals 'pkg', api all of export 7 | for (def entrySet : ConfigUtils.getApplyExports().entrySet()) { 8 | api entrySet.value.dep 9 | } 10 | } else if (project.name.endsWith("_export")) { 11 | api Config.modules.lib_common.dep 12 | } 13 | } -------------------------------------------------------------------------------- /buildSrc/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /buildSrc/build.gradle: -------------------------------------------------------------------------------- 1 | repositories { 2 | google() 3 | jcenter() 4 | } 5 | 6 | apply { 7 | plugin 'groovy' 8 | plugin 'java-gradle-plugin' 9 | } 10 | 11 | gradlePlugin { 12 | plugins { 13 | readmeCore { 14 | id = 'readme-core' 15 | implementationClass = 'com.blankj.plugin.readme.ReadmeCorePlugin' 16 | } 17 | 18 | readmeSub { 19 | id = 'readme-sub' 20 | implementationClass = 'com.blankj.plugin.readme.ReadmeSubPlugin' 21 | } 22 | } 23 | } 24 | 25 | dependencies { 26 | implementation gradleApi() 27 | implementation localGroovy() 28 | implementation "commons-io:commons-io:2.6" 29 | } 30 | 31 | sourceSets { 32 | main { 33 | groovy { 34 | srcDirs += 'src/main/java' 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /buildSrc/settings.gradle: -------------------------------------------------------------------------------- 1 | //dependencyResolutionManagement { 2 | // repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 3 | // repositories { 4 | // google() 5 | // mavenCentral() 6 | // jcenter() // Warning: this repository is going to shut down soon 7 | // } 8 | //} -------------------------------------------------------------------------------- /buildSrc/src/main/groovy/LibConfig.groovy: -------------------------------------------------------------------------------- 1 | class LibConfig { 2 | 3 | String path 4 | 5 | String getGroupId() { 6 | String[] splits = path.split(":") 7 | return splits.length == 3 ? splits[0] : null 8 | } 9 | 10 | String getArtifactId() { 11 | String[] splits = path.split(":") 12 | return splits.length == 3 ? splits[1] : null 13 | } 14 | 15 | String getVersion() { 16 | String[] splits = path.split(":") 17 | return splits.length == 3 ? splits[2] : null 18 | } 19 | 20 | @Override 21 | String toString() { 22 | return "LibConfig { path = $path }" 23 | } 24 | 25 | static String getFlag(boolean b) { 26 | return b ? "✅" : "❌" 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /buildSrc/src/main/groovy/ModuleConfig.groovy: -------------------------------------------------------------------------------- 1 | class ModuleConfig { 2 | 3 | boolean isApply // 是否应用 4 | boolean useLocal // 是否使用本地的 5 | String localPath // 本地路径 6 | String remotePath // 远程路径 7 | def dep // 根据条件生成项目最终的依赖项 8 | 9 | String getGroupId() { 10 | String[] splits = remotePath.split(":") 11 | return splits.length == 3 ? splits[0] : null 12 | } 13 | 14 | String getArtifactId() { 15 | String[] splits = remotePath.split(":") 16 | return splits.length == 3 ? splits[1] : null 17 | } 18 | 19 | String getVersion() { 20 | String[] splits = remotePath.split(":") 21 | return splits.length == 3 ? splits[2] : null 22 | } 23 | 24 | @Override 25 | String toString() { 26 | return "ModuleConfig { isApply = ${getFlag(isApply)}" + 27 | ", dep = " + dep + 28 | " }" 29 | } 30 | 31 | static String getFlag(boolean b) { 32 | return b ? "✅" : "❌" 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /buildSrc/src/main/groovy/PluginConfig.groovy: -------------------------------------------------------------------------------- 1 | final class PluginConfig { 2 | 3 | boolean isApply = true // 是否应用 4 | boolean useLocal // 是否使用本地的 5 | String path // 插件路径 6 | String id // 插件 ID 7 | 8 | String getGroupId() { 9 | String[] splits = path.split(":") 10 | return splits.length == 3 ? splits[0] : null 11 | } 12 | 13 | String getArtifactId() { 14 | String[] splits = path.split(":") 15 | return splits.length == 3 ? splits[1] : null 16 | } 17 | 18 | String getVersion() { 19 | String[] splits = path.split(":") 20 | return splits.length == 3 ? splits[2] : null 21 | } 22 | 23 | @Override 24 | String toString() { 25 | return "PluginConfig { isApply = ${getFlag(isApply)}" + 26 | ", useLocal = ${getFlag(useLocal)}" + 27 | ", path = " + path + 28 | ", id = " + id + 29 | " }" 30 | } 31 | 32 | static String getFlag(boolean b) { 33 | return b ? "✅" : "❌" 34 | } 35 | } -------------------------------------------------------------------------------- /buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeExtension.groovy: -------------------------------------------------------------------------------- 1 | package com.blankj.plugin.readme 2 | 3 | class ReadmeExtension { 4 | 5 | File readmeFile 6 | File readmeCnFile 7 | 8 | } 9 | -------------------------------------------------------------------------------- /config/flavor.gradle: -------------------------------------------------------------------------------- 1 | android { 2 | flavorDimensions "env" 3 | productFlavors { 4 | dev { 5 | dimension "env" 6 | } 7 | 8 | production { 9 | dimension "env" 10 | } 11 | } 12 | 13 | variantFilter { variant -> 14 | def flavorNames = variant.flavors*.name 15 | def buildTypeName = variant.buildType.name 16 | 17 | // production 包不允许 debug 构建 18 | if (flavorNames.contains("production") && buildTypeName.contains("debug")) { 19 | variant.setIgnore(true) 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /feature/launcher/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/launcher/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'kotlin-kapt' 2 | 3 | dependencies { 4 | kapt Config.libs.eventbus_processor.path 5 | } -------------------------------------------------------------------------------- /feature/launcher/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/launcher/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /feature/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java: -------------------------------------------------------------------------------- 1 | package com.blankj.launcher.app; 2 | 3 | import com.blankj.common.CommonApplication; 4 | 5 | /** 6 | *
 7 |  *     author: Blankj
 8 |  *     blog  : http://blankj.com
 9 |  *     time  : 2016/10/12
10 |  *     desc  :
11 |  * 
12 | */ 13 | public class LauncherApp extends CommonApplication { 14 | 15 | private static LauncherApp sInstance; 16 | 17 | public static LauncherApp getInstance() { 18 | return sInstance; 19 | } 20 | 21 | @Override 22 | public void onCreate() { 23 | super.onCreate(); 24 | sInstance = this; 25 | } 26 | } 27 | 28 | 29 | -------------------------------------------------------------------------------- /feature/main/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/main/app/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/main/app/build.gradle -------------------------------------------------------------------------------- /feature/main/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/main/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /feature/main/app/src/main/java/com/blankj/main/app/MainApp.java: -------------------------------------------------------------------------------- 1 | package com.blankj.main.app; 2 | 3 | import android.content.Context; 4 | 5 | import com.blankj.common.CommonApplication; 6 | 7 | /** 8 | *
 9 |  *     author: Blankj
10 |  *     blog  : http://blankj.com
11 |  *     time  : 2016/10/12
12 |  *     desc  :
13 |  * 
14 | */ 15 | public class MainApp extends CommonApplication { 16 | 17 | private static MainApp sInstance; 18 | 19 | public static MainApp getInstance() { 20 | return sInstance; 21 | } 22 | 23 | @Override 24 | protected void attachBaseContext(Context base) { 25 | super.attachBaseContext(base); 26 | } 27 | 28 | @Override 29 | public void onCreate() { 30 | super.onCreate(); 31 | sInstance = this; 32 | } 33 | } 34 | 35 | 36 | -------------------------------------------------------------------------------- /feature/main/pkg/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/main/pkg/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/main/pkg/build.gradle -------------------------------------------------------------------------------- /feature/main/pkg/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/main/pkg/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /feature/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.main.pkg 2 | 3 | import com.blankj.common.activity.CommonActivity 4 | 5 | class SplashActivity : CommonActivity() { 6 | 7 | } -------------------------------------------------------------------------------- /feature/main/pkg/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/mock/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/mock/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/mock/build.gradle -------------------------------------------------------------------------------- /feature/mock/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/mock/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /feature/mock/src/main/java/com/blankj/mock/subutil/SubUtilApiMock.java: -------------------------------------------------------------------------------- 1 | package com.blankj.mock.subutil; 2 | 3 | import android.content.Context; 4 | 5 | import com.blankj.subutil.export.api.SubUtilApi; 6 | import com.blankj.utilcode.util.ApiUtils; 7 | import com.blankj.utilcode.util.ToastUtils; 8 | 9 | /** 10 | *
11 |  *     author: Blankj
12 |  *     blog  : http://blankj.com
13 |  *     time  : 2019/07/10
14 |  *     desc  :
15 |  * 
16 | */ 17 | @ApiUtils.Api(isMock = true) 18 | public class SubUtilApiMock extends SubUtilApi { 19 | 20 | @Override 21 | public void startSubUtilActivity(Context context) { 22 | ToastUtils.showShort("startSubUtilActivity"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /feature/mock/src/main/java/com/blankj/mock/utilcode/UtilCodeApiMock.java: -------------------------------------------------------------------------------- 1 | package com.blankj.mock.utilcode; 2 | 3 | import android.content.Context; 4 | 5 | import com.blankj.utilcode.export.api.UtilCodeApi; 6 | import com.blankj.utilcode.util.ApiUtils; 7 | import com.blankj.utilcode.util.ToastUtils; 8 | 9 | /** 10 | *
11 |  *     author: Blankj
12 |  *     blog  : http://blankj.com
13 |  *     time  : 2019/07/10
14 |  *     desc  :
15 |  * 
16 | */ 17 | @ApiUtils.Api(isMock = true) 18 | public class UtilCodeApiMock extends UtilCodeApi { 19 | 20 | @Override 21 | public void startUtilCodeActivity(Context context) { 22 | ToastUtils.showShort("startUtilCodeActivity"); 23 | } 24 | 25 | @Override 26 | public void testCallback(Callback callback) { 27 | if (callback != null) { 28 | callback.call(); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /feature/subutil/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/subutil/app/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/subutil/app/build.gradle -------------------------------------------------------------------------------- /feature/subutil/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/subutil/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /feature/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.subutil.app 2 | 3 | import android.content.Context 4 | import com.blankj.common.CommonApplication 5 | 6 | 7 | /** 8 | * ``` 9 | * author: Blankj 10 | * blog : http://blankj.com 11 | * time : 2016/10/12 12 | * desc : app about utils 13 | * ``` 14 | */ 15 | class SubUtilApp : CommonApplication() { 16 | 17 | companion object { 18 | var instance: SubUtilApp? = null 19 | private set 20 | } 21 | 22 | override fun attachBaseContext(base: Context) { 23 | super.attachBaseContext(base) 24 | } 25 | 26 | override fun onCreate() { 27 | super.onCreate() 28 | instance = this 29 | } 30 | } 31 | 32 | 33 | -------------------------------------------------------------------------------- /feature/subutil/export/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/subutil/export/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/subutil/export/build.gradle -------------------------------------------------------------------------------- /feature/subutil/export/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/subutil/export/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java: -------------------------------------------------------------------------------- 1 | package com.blankj.subutil.export.api; 2 | 3 | import android.content.Context; 4 | 5 | import com.blankj.utilcode.util.ApiUtils; 6 | 7 | 8 | /** 9 | *
10 |  *     author: Blankj
11 |  *     blog  : http://blankj.com
12 |  *     time  : 2019/06/09
13 |  *     desc  :
14 |  * 
15 | */ 16 | public abstract class SubUtilApi extends ApiUtils.BaseApi { 17 | 18 | public abstract void startSubUtilActivity(Context context); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /feature/subutil/pkg/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/subutil/pkg/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/subutil/pkg/build.gradle -------------------------------------------------------------------------------- /feature/subutil/pkg/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/Config.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.subutil.pkg 2 | 3 | import android.os.Environment 4 | import com.blankj.utilcode.util.Utils 5 | 6 | /** 7 | * ``` 8 | * author: Blankj 9 | * blog : http://blankj.com 10 | * time : 2017/05/10 11 | * desc : config about constants 12 | * ``` 13 | */ 14 | object Config { 15 | 16 | val FILE_SEP = System.getProperty("file.separator") 17 | val LINE_SEP = System.getProperty("line.separator") 18 | const val TEST_PKG = "com.blankj.testinstall" 19 | private val CACHE_PATH: String 20 | val TEST_APK_PATH: String 21 | 22 | init { 23 | val cacheDir = Utils.getApp().externalCacheDir 24 | CACHE_PATH = if (cacheDir != null) { 25 | cacheDir.absolutePath 26 | } else { 27 | Environment.getExternalStorageDirectory().absolutePath 28 | } + FILE_SEP 29 | TEST_APK_PATH = CACHE_PATH + "test_install.apk" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/SubUtilApiImpl.java: -------------------------------------------------------------------------------- 1 | package com.blankj.subutil.pkg; 2 | 3 | import android.content.Context; 4 | 5 | import com.blankj.subutil.export.api.SubUtilApi; 6 | import com.blankj.subutil.pkg.feature.SubUtilActivity; 7 | import com.blankj.utilcode.util.ApiUtils; 8 | 9 | /** 10 | *
11 |  *     author: Blankj
12 |  *     blog  : http://blankj.com
13 |  *     time  : 2019/07/02
14 |  *     desc  :
15 |  * 
16 | */ 17 | @ApiUtils.Api 18 | public class SubUtilApiImpl extends SubUtilApi { 19 | 20 | @Override 21 | public void startSubUtilActivity(Context context) { 22 | SubUtilActivity.Companion.start(context); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /feature/utilcode/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/utilcode/app/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/utilcode/app/build.gradle -------------------------------------------------------------------------------- /feature/utilcode/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/utilcode/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /feature/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.app 2 | 3 | import com.blankj.common.CommonApplication 4 | import com.blankj.utilcode.util.Utils 5 | 6 | 7 | /** 8 | * ``` 9 | * author: Blankj 10 | * blog : http://blankj.com 11 | * time : 2016/10/12 12 | * desc : app about utils 13 | * ``` 14 | */ 15 | class UtilCodeApp : CommonApplication() { 16 | 17 | companion object { 18 | lateinit var instance: UtilCodeApp 19 | private set 20 | } 21 | 22 | override fun onCreate() { 23 | Utils.init(this) 24 | super.onCreate() 25 | instance = this 26 | // BusUtils.register("com.blankj.androidutilcode") 27 | } 28 | } 29 | 30 | 31 | -------------------------------------------------------------------------------- /feature/utilcode/export/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/utilcode/export/build.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | groupId = Config.modules.feature_utilcode_export.groupId 3 | artifactId = Config.modules.feature_utilcode_export.artifactId 4 | version = Config.modules.feature_utilcode_export.version 5 | website = "https://github.com/Blankj/AndroidUtilCode" 6 | } 7 | //apply from: "${rootDir.path}/config/publish.gradle" 8 | //./gradlew :feature_utilcode_export:mavenLocal // 上传到本地 mavenLocal -------------------------------------------------------------------------------- /feature/utilcode/export/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/utilcode/export/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/export/src/main/java/com/blankj/utilcode/export/api/UtilCodeApi.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.export.api; 2 | 3 | import android.content.Context; 4 | 5 | import com.blankj.utilcode.util.ApiUtils; 6 | 7 | 8 | /** 9 | *
10 |  *     author: Blankj
11 |  *     blog  : http://blankj.com
12 |  *     time  : 2019/07/01
13 |  *     desc  :
14 |  * 
15 | */ 16 | public abstract class UtilCodeApi extends ApiUtils.BaseApi { 17 | 18 | public abstract void startUtilCodeActivity(Context context); 19 | 20 | public abstract void testCallback(Callback callback); 21 | 22 | public interface Callback { 23 | void call(); 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /feature/utilcode/pkg/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/utilcode/pkg/build.gradle -------------------------------------------------------------------------------- /feature/utilcode/pkg/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/assets/fonts/dnmbhs.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/utilcode/pkg/src/main/assets/fonts/dnmbhs.ttf -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/assets/test/sub/test.txt: -------------------------------------------------------------------------------- 1 | 1st line 2 | 2nd line -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/assets/test/test.txt: -------------------------------------------------------------------------------- 1 | 1st line 2 | 2nd line -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg 2 | 3 | import com.blankj.utilcode.util.PathUtils 4 | 5 | /** 6 | * ``` 7 | * author: Blankj 8 | * blog : http://blankj.com 9 | * time : 2017/05/10 10 | * desc : config about constants 11 | * ``` 12 | */ 13 | object Config { 14 | val FILE_SEP = System.getProperty("file.separator") 15 | val LINE_SEP = System.getProperty("line.separator") 16 | const val TEST_PKG = "com.blankj.testinstall" 17 | val CACHE_PATH = PathUtils.getCachePathExternalFirst() + FILE_SEP 18 | val TEST_APK_PATH: String = CACHE_PATH + "test_install.apk" 19 | } 20 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg; 2 | 3 | import android.content.Context; 4 | 5 | import com.blankj.utilcode.export.api.UtilCodeApi; 6 | import com.blankj.utilcode.pkg.feature.CoreUtilActivity; 7 | import com.blankj.utilcode.util.ApiUtils; 8 | 9 | /** 10 | *
11 |  *     author: Blankj
12 |  *     blog  : http://blankj.com
13 |  *     time  : 2019/07/01
14 |  *     desc  :
15 |  * 
16 | */ 17 | @ApiUtils.Api 18 | public class UtilCodeApiImpl extends UtilCodeApi { 19 | 20 | @Override 21 | public void startUtilCodeActivity(Context context) { 22 | CoreUtilActivity.Companion.start(context); 23 | } 24 | 25 | @Override 26 | public void testCallback(Callback callback) { 27 | if (callback != null) { 28 | callback.call(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.adaptScreen 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.content.res.Resources 6 | import android.os.Bundle 7 | import android.view.View 8 | import android.view.WindowManager 9 | import com.blankj.common.activity.CommonActivity 10 | import com.blankj.utilcode.pkg.R 11 | import com.blankj.utilcode.util.AdaptScreenUtils 12 | 13 | class AdaptCloseActivity : CommonActivity() { 14 | 15 | companion object { 16 | fun start(context: Context) { 17 | val starter = Intent(context, AdaptCloseActivity::class.java) 18 | context.startActivity(starter) 19 | } 20 | } 21 | 22 | override fun bindLayout(): Int { 23 | return R.layout.adaptscreen_close_activity 24 | } 25 | 26 | override fun initView(savedInstanceState: Bundle?, contentView: View?) { 27 | super.initView(savedInstanceState, contentView) 28 | window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) 29 | } 30 | 31 | override fun getResources(): Resources { 32 | return AdaptScreenUtils.closeAdapt(super.getResources()) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/export/OtherModuleApi.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.api.other.export; 2 | 3 | import com.blankj.utilcode.util.ApiUtils; 4 | 5 | /** 6 | *
 7 |  *     author: Blankj
 8 |  *     blog  : http://blankj.com
 9 |  *     time  : 2019/07/10
10 |  *     desc  : demo about ApiUtils
11 |  * 
12 | */ 13 | public abstract class OtherModuleApi extends ApiUtils.BaseApi { 14 | 15 | public abstract void invokeWithParams(ApiBean bean); 16 | 17 | public abstract ApiBean invokeWithReturnValue(); 18 | 19 | public static class ApiBean { 20 | 21 | public String name; 22 | 23 | public ApiBean(String name) { 24 | this.name = name; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.api.other.pkg; 2 | 3 | import com.blankj.utilcode.pkg.feature.api.other.export.OtherModuleApi; 4 | import com.blankj.utilcode.util.ApiUtils; 5 | import com.blankj.utilcode.util.ToastUtils; 6 | 7 | /** 8 | *
 9 |  *     author: Blankj
10 |  *     blog  : http://blankj.com
11 |  *     time  : 2019/07/10
12 |  *     desc  : demo about ApiUtils
13 |  * 
14 | */ 15 | @ApiUtils.Api 16 | public class OtherPkgApiImpl extends OtherModuleApi { 17 | 18 | @Override 19 | public void invokeWithParams(ApiBean bean) { 20 | ToastUtils.showShort(bean.name); 21 | } 22 | 23 | @Override 24 | public ApiBean invokeWithReturnValue() { 25 | String value = "value"; 26 | return new ApiBean(value); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityCustom.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.bar.status 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.graphics.Color 6 | import android.os.Bundle 7 | import android.view.View 8 | import com.blankj.common.activity.CommonActivity 9 | import com.blankj.utilcode.pkg.R 10 | import com.blankj.utilcode.util.BarUtils 11 | 12 | 13 | /** 14 | * ``` 15 | * author: Blankj 16 | * blog : http://blankj.com 17 | * time : 2019/01/14 18 | * desc : demo about BarUtils 19 | * ``` 20 | */ 21 | class BarStatusActivityCustom : CommonActivity() { 22 | 23 | companion object { 24 | fun start(context: Context) { 25 | val starter = Intent(context, BarStatusActivityCustom::class.java) 26 | context.startActivity(starter) 27 | } 28 | } 29 | 30 | override fun initView(savedInstanceState: Bundle?, contentView: View?) { 31 | super.initView(savedInstanceState, contentView) 32 | BarUtils.setStatusBarColor(this, Color.TRANSPARENT).setBackgroundResource(R.drawable.bar_status_custom) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.bar.status.fragment 2 | 3 | import android.os.Bundle 4 | import android.view.View 5 | import com.blankj.common.fragment.CommonFragment 6 | import com.blankj.utilcode.pkg.R 7 | import com.blankj.utilcode.util.BarUtils 8 | import kotlinx.android.synthetic.main.bar_status_custom_fragment.* 9 | 10 | /** 11 | * ``` 12 | * author: Blankj 13 | * blog : http://blankj.com 14 | * time : 2017/07/01 15 | * desc : demo about BarUtils 16 | * ``` 17 | */ 18 | class BarStatusFragmentCustom : CommonFragment() { 19 | 20 | companion object { 21 | fun newInstance(): BarStatusFragmentCustom { 22 | return BarStatusFragmentCustom() 23 | } 24 | } 25 | 26 | override fun isLazy(): Boolean { 27 | return true 28 | } 29 | 30 | override fun bindLayout(): Int { 31 | return R.layout.bar_status_custom_fragment 32 | } 33 | 34 | override fun initView(savedInstanceState: Bundle?, contentView: View?) { 35 | super.initView(savedInstanceState, contentView) 36 | BarUtils.setStatusBarCustom(barStatusCustomFragmentFakeStatusBar) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.mvp; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | 8 | import com.blankj.common.activity.CommonActivity; 9 | import com.blankj.utilcode.pkg.R; 10 | 11 | import androidx.annotation.Nullable; 12 | 13 | /** 14 | *
15 |  *     author: blankj
16 |  *     blog  : http://blankj.com
17 |  *     time  : 2019/11/09
18 |  *     desc  :
19 |  * 
20 | */ 21 | public class MvpActivity extends CommonActivity { 22 | 23 | public static void start(Context context) { 24 | Intent starter = new Intent(context, MvpActivity.class); 25 | context.startActivity(starter); 26 | } 27 | 28 | @Override 29 | public int bindTitleRes() { 30 | return R.string.demo_mvp; 31 | } 32 | 33 | @Override 34 | public int bindLayout() { 35 | return R.layout.mvp_activity; 36 | } 37 | 38 | @Override 39 | public void initView(@Nullable Bundle savedInstanceState, @Nullable View contentView) { 40 | super.initView(savedInstanceState, contentView); 41 | new MvpView(this).addPresenter(new MvpPresenter()); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.mvp; 2 | 3 | import com.blankj.base.mvp.BaseModel; 4 | import com.blankj.utilcode.util.ThreadUtils; 5 | import com.blankj.utilcode.util.Utils; 6 | 7 | /** 8 | *
 9 |  *     author: blankj
10 |  *     blog  : http://blankj.com
11 |  *     time  : 2019/11/26
12 |  *     desc  :
13 |  * 
14 | */ 15 | public class MvpModel extends BaseModel implements MvpMvp.Model { 16 | 17 | private int index; 18 | 19 | @Override 20 | public void onCreate() { 21 | index = 0; 22 | } 23 | 24 | @Override 25 | public void requestUpdateMsg(final Utils.Consumer consumer) { 26 | ThreadUtils.executeByCached(new ThreadUtils.SimpleTask() { 27 | @Override 28 | public String doInBackground() throws Throwable { 29 | Thread.sleep(2000); 30 | return "msg: " + index++; 31 | } 32 | 33 | @Override 34 | public void onSuccess(String result) { 35 | consumer.accept(result); 36 | } 37 | }); 38 | } 39 | 40 | @Override 41 | public void onDestroy() { 42 | super.onDestroy(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpMvp.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.mvp; 2 | 3 | import com.blankj.utilcode.util.Utils; 4 | 5 | /** 6 | *
 7 |  *     author: blankj
 8 |  *     blog  : http://blankj.com
 9 |  *     time  : 2019/11/26
10 |  *     desc  :
11 |  * 
12 | */ 13 | public interface MvpMvp { 14 | 15 | interface View { 16 | void setLoadingVisible(boolean visible); 17 | 18 | void showMsg(CharSequence msg); 19 | } 20 | 21 | interface Presenter { 22 | void updateMsg(); 23 | } 24 | 25 | interface Model { 26 | void requestUpdateMsg(final Utils.Consumer consumer); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.mvp; 2 | 3 | import com.blankj.base.mvp.BasePresenter; 4 | import com.blankj.utilcode.util.LogUtils; 5 | import com.blankj.utilcode.util.Utils; 6 | 7 | /** 8 | *
 9 |  *     author: blankj
10 |  *     blog  : http://blankj.com
11 |  *     time  : 2019/11/26
12 |  *     desc  :
13 |  * 
14 | */ 15 | public class MvpPresenter extends BasePresenter 16 | implements MvpMvp.Presenter { 17 | 18 | @Override 19 | public void onBindView() { 20 | } 21 | 22 | @Override 23 | public void updateMsg() { 24 | getView().setLoadingVisible(true); 25 | getModel(MvpModel.class).requestUpdateMsg(new Utils.Consumer() { 26 | @Override 27 | public void accept(String s) { 28 | if (isAlive()) { 29 | getView().showMsg(s); 30 | getView().setLoadingVisible(false); 31 | } else { 32 | LogUtils.iTag(MvpView.TAG, "destroyed"); 33 | } 34 | } 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java: -------------------------------------------------------------------------------- 1 | package com.blankj.utilcode.pkg.feature.reflect; 2 | 3 | import androidx.annotation.Keep; 4 | 5 | /** 6 | *
 7 |  *     author: blankj
 8 |  *     blog  : http://blankj.com
 9 |  *     time  : 2019/09/09
10 |  *     desc  :
11 |  * 
12 | */ 13 | @Keep 14 | public class TestPrivateStaticFinal { 15 | public static final String STR = "str"; 16 | } 17 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/anim/fade_in_1000.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/anim/fade_out_1000.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/anim/slide_bottom_in_200.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/anim/slide_bottom_out_200.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/anim/slide_left_out_1000.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/anim/slide_right_in_1000.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/animator/fragment_slide_left_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 17 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/animator/fragment_slide_left_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 17 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/animator/fragment_slide_right_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 17 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/animator/fragment_slide_right_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 17 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/activity_activity_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/utilcode/pkg/src/main/res/drawable/activity_activity_icon.png -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/activity_activity_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/utilcode/pkg/src/main/res/drawable/activity_activity_logo.png -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/bar_status_custom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/bar_status_nav_custom.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/image_lena.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/utilcode/pkg/src/main/res/drawable/image_lena.jpg -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/keyboard_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 10 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/shadow_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/shadow_round_rect.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/snackbar_custom_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/span_block_high.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/span_block_low.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/span_cheetah.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Blankj/AndroidUtilCode/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/feature/utilcode/pkg/src/main/res/drawable/span_cheetah.png -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/drawable/toast_round_rect.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/activity_item_shared_element_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/activity_sub_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_alpha_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_alpha_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_color_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_custom_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_drawer_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_fragment_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 23 | 24 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_image_view_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/bar_status_image_view_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/fragment_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 22 | 23 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/fragment_child.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/fragment_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/fragment_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/fragment_item_shared_element.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/fragment_root.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 17 | 18 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/keyboard_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 15 | 16 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/screen_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/snackbar_custom.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/span_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/toast_custom.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /feature/utilcode/pkg/src/main/res/layout/toast_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |