diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE/bug_report.md similarity index 77% rename from .github/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE/bug_report.md index daea781567..e29c2e45b6 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,8 +1,16 @@ +--- +name: Bug report +about: Make AndroidUtilCode more perfect! +labels: bug +assignees: Blankj + +--- + ## Describe the bug A clear and concise description of what the bug is. -- The version of utilcode: +- The version of AndroidUtilCode: - The device: - The version of device: @@ -39,6 +47,6 @@ put the stack of crash here If applicable, add screenshots to help explain your problem. -Please delete the current line and the followings. +## Please delete the current line and the following. -Thank you for supporting [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). \ No newline at end of file +Thank you for supporting [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). diff --git a/.github/ISSUE_TEMPLATE/bug_report_cn.md b/.github/ISSUE_TEMPLATE/bug_report_cn.md new file mode 100644 index 0000000000..02ea0223e3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_cn.md @@ -0,0 +1,52 @@ +--- +name: 提交 Bug +about: 让工具类更完美! +labels: bug +assignees: Blankj + +--- + +## 描述 Bug + +简洁地描述下 Bug。 + +- AndroidUtilCode 的版本: +- 出现 Bug 的设备型号: +- 设备的 Android 版本: + +## 相关代码 + + +``` +put your code here +``` + +## 异常堆栈 + + + +``` +put the stack of crash here +``` + +## 截图 + +如果有的话请添加屏幕截图以帮助解释问题。 + + +## 请删除当前行及以下内容 + +感谢支持 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 0000000000..90a0fe1993 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,21 @@ +--- +name: Feature request +about: Make AndroidUtilCode more perfect! +labels: help wanted +assignees: Blankj + +--- + +## Describe the feature + +A clear and concise description of what the feature is. + + +## Reference + +Hope to give some reference articles, links, code, if any. + + +## Please delete the current line and the following + +Thank you for supporting [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). diff --git a/.github/ISSUE_TEMPLATE/feature-request_cn.md b/.github/ISSUE_TEMPLATE/feature-request_cn.md new file mode 100644 index 0000000000..20862d047b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request_cn.md @@ -0,0 +1,21 @@ +--- +name: 提交需求 +about: 让工具类更健全! +labels: help wanted +assignees: Blankj + +--- + +## 描述需求 + +简洁地描述下需求。 + + +## 可借鉴的 + +如果有的话,可以给出一些参考文章、链接、代码 + + +## 请删除当前行及以下内容 + +感谢支持 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode). diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000000..311fc1deaa --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,17 @@ +name: Android CI + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build with Gradle + run: ./gradlew build aR diff --git a/.gitignore b/.gitignore index 8a2a05788d..9d11f56a24 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,6 @@ local.properties .externalNativeBuild /apk *.phrof -/maven +/mavenLocal +/reports +*/reports \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 195511dd82..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: android -jdk: oraclejdk8 -sudo: false - -android: - components: - - tools - - platform-tools - - build-tools-27.0.2 - - android-27 - - add-on - - extra - - licenses: - - 'android-sdk-license-.+' - - notifications: - email: false - -before_install: - - yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;26.0.2" - -script: - - ./gradlew aR diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d5b1b84f7..73e8145bf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,92 @@ +* `22/10/15` [add] Fix some issue. Publish v1.31.1 +* `21/12/06` [add] Publish v1.31.0 +* `21/05/13` [add] Support publish mavenCentral. +* `21/02/22` [add] Fix ToastUtils rtl bug. Publish v1.30.6. +* `20/11/16` [add] Add ImageUtils#save2Album support param of dirName. +* `20/11/13` [add] Fix MessengerUtils ANR. Add NetworkUtils#getWifiScanResult, [add|remove]OnWifiChangedConsumer. Publish v1.30.5. +* `20/10/29` [add] Fix MessengerUtils startService IllegalStateException. Publish v1.30.4. +* `20/10/28` [add] Fix BusUtils ConcurrentModificationException. Publish v1.30.3. +* `20/10/27` [add] Fix AppUtils#getAppSignatures. Add DeviceUtils#isDevelopmentSettingsEnabled. Publish v1.30.2. +* `20/10/26` [add] Fix AppUtils#isAppForeground. Publish v1.30.1. +* `20/10/24` [add] Publish v1.30.0. +* `20/10/23` [fix] LanguageUtils crash on some device. +* `20/10/21` [add] LogUtils.Config#setOnConsoleOutputListener, setOnFileOutputListener, addFileExtraHead. LogUtils.getCurrentLogFilePath. +* `20/10/20` [opt] ToastUtils. +* `20/10/12` [add] PermissionUtils#explain. +* `20/10/10` [add] ClipboardUtils. +* `20/10/08` [add] VolumeUtils. +* `20/09/06` [add] DebouncingUtils#isValid. +* `20/09/04` [fix] ToastUtils adapt SDK 30. +* `20/05/28` [fix] IntentUtils#getInstallAppIntent file exist wrong. Publish v1.29.0. +* `20/05/23` [fix] BusUtils#postSticky times not right. Publish v1.28.6. +* `20/05/22` [add] IntentUtils#getInstallAppIntent support Uri param. +* `20/05/21` [add] Publish bus plugin v2.6. Publish api plugin v1.4. Publish. Publish v1.28.5. +* `20/05/19` [fix] FileUtils#copyOrMoveDird NPE. +* `20/05/18` [add] IntentUtils#getLaunchAppDetailsSettingsIntent support isNewTask. +* `20/05/17` [add] ImageUtils#save2Album, NetworkUtils#getSSID, UtilsTransActivity4MainProcess. +* `20/05/03` [add] Publish bus plugin v2.5. Publish api plugin v1.3. Publish. Publish v1.28.4. +* `20/04/30` [add] BaseItem support partialUpdate. +* `20/04/29` [add] Publish plugin lib com.blankj:base-transform:1.0. +* `20/04/28` [fix] LanguageUtils#applyLanguage. +* `20/04/27` [fix] BarUtils#isNavBarVisible. +* `20/04/26` [fix] Utils#init fit tinker. Publish v1.28.3. +* `20/04/25` [fix] UriUtils#uri2File Unknown URI. Publish 1.28.2. +* `20/04/24` [add] SnackbarUtils support show on the top; UriUtils#uri2InputStream. +* `20/04/23` [fix] UriUtils#uri2File not support HW; TransActivity crash below 21. +* `20/04/23` [fix] PhoneUtils#getSerial, PhoneUtils#getSerial crash on Android 10. +* `20/04/20` [fix] ImageUtils#isImage. +* `20/04/18` [fix] PermissionUtils#callback. Publish v1.28.1. +* `20/04/17` [fix] ImageUtils#view2Bitmap, ImageUtils.getBitmap(InputStream). +* `20/04/16` [add] ConvertUtils#int2HexString, hexString2Int. +* `20/04/15` [add] UiMessageUtils' demo. +* `20/04/13` [add] NumberUtils. Publish v1.28.0. +* `20/04/12` [opt] TimeUtils#SDF_THREAD_LOCAL. +* `20/04/11` [add] SDCardUtils#getXxTotalSize, SDCardUtils#getXxAvailableSize. FileUtils#getFsTotalSize, FileUtils#getFsAvailableSize. +* `20/04/10` [fix] FileUtils#isFileExists; FragmentUtils#getTop bug. Publish v1.27.6. +* `20/04/09` [add] UriUtils#res2Uri, UriUtils#uri2File support QQBrowser; ThreadUtils#getMainHandler; PathUtils#getxxPathExternalFirst. +* `20/04/08` [fix] ActivityUtils#finish bug. Publish v1.27.5. +* `20/04/08` [fix] CleanUtils clean dir not work. FileUtils#isFileExists. Publish v1.27.4. +* `20/04/08` [fix] CrashUtils DefaultUncaughtExceptionHandler is wrong; LogUtils write file failed; Utils#getApp failed run on remote process. Publish v1.27.3. +* `20/04/07` [mdf] GsonUtils#getGson() method public. +* `20/04/04` [fix] ShadowUtils bug running on lower version devices. Publish v1.27.2. +* `20/04/03` [fix] UtilsActivityLifecycleImpl#HashMap#remove IllegalStateException bug. +* `20/04/02` [fix] PathUtils sdcard enable state is wrong; ActivityUtils finish activity wrong; Publish v1.27.1. +* `20/03/31` [add] Publish v1.27.0. +* `20/03/30` [add] BatteryUtils in subutil. +* `20/03/27` [add] publish.gradle. +* `20/03/24` [add] UtilsBridge to clean the utils. +* `20/03/22` [upd] GsonUtils support custom gson. +* `20/03/20` [add] ActivityUtils#addActivityLifecycleCallbacks, ActivityUtils#removeActivityLifecycleCallbacks. +* `20/01/17` [upd] Leak Canary to v2.1. +* `20/01/06` [add] ClickUtils#expandClickArea, ClickUtils#back2HomeFriendly +* `19/11/30` [add] Publish bus plugin v2.4. Publish api plugin v1.2. +* `19/11/28` [add] Publish v1.26.0. +* `19/11/27` [add] Shadow demo. +* `19/11/26` [add] MVP demo. +* `19/11/22` [fix] Adapt the project for Gradle version of 6.0. +* `19/10/30` [add] Publish bus plugin v2.3. Publish api plugin v1.1. +* `19/10/24` [upd] Demo's UI. +* `19/10/22` [add] NotificationUtils and demo. +* `19/10/20` [add] UiMessageUtils. +* `19/09/20` [add] ShadowUtils. +* `19/08/27` [add] DebugUtils. +* `19/08/26` [fix] PermissionUtils NPE. +* `19/08/25` [upd] ImageUtils#getImageType. [add] LogUtils#getLogFiles. Publish v1.25.9. +* `19/08/24` [fix] PhoneUtils#getIMEI crash on SDK 29. +* `19/08/23` [add] ViewUtils#isLayoutRtl. +* `19/08/22` [add] LogUtils#getLogFiles. +* `19/08/13` [add] MapUtils and MapUtilsTest. Publish v1.25.8. +* `19/08/12` [add] CollectionUtils and CollectionUtilsTest. +* `19/08/11` [add] ArrayUtils and ArrayUtilsTest. +* `19/08/09` [fix] https://www.virustotal.com/gui/home/upload with ESET-NOD32. Publish v1.25.7. +* `19/08/08` [add] BusUtils#post tag support one-to-many. Publish v1.25.6. +* `19/08/04` [add] ThreadUtils#Task support timeout. +* `19/08/01` [upd] EncryptUtils#rsa. +* `19/07/31` [add] DeviceUtils#getUniqueDeviceId, DeviceUtils#isSameDevice. Publish v1.25.5. +* `19/07/30` [fix] ThreadUtils's task can only be executed once. PhoneUtils#getIMEI wrong. +* `19/07/29` [fix] BusUtils post father class useless. KeyboardUtils#hideSoft bug. Publish v1.25.4. +* `19/07/28` [add] NetworkUtils#(un)registerNetworkStatusChangedListener. Publish v1.25.3. +* `19/07/27` [fix] ThreadUtils memory leak. * `19/07/26` [add] ContainerUtils. Publish v1.25.2. * `19/07/25` [fix] PermissionUtils' NullPointException. * `19/07/24` [fix] ZipUtils#unzipFile. @@ -22,6 +111,7 @@ * `19/04/24` [upd] The swipe panel. * `19/03/17` [fix] The ugly UI. * `19/03/14` [fix] AdaptScreenUtils didn't work on some HaWei tablet. +* `19/03/09` [fix] UriUtils#uri2File. * `19/03/08` [add] LogUtils support multi process. Publish v1.23.7. * `19/03/02` [fix] LogUtils#file. * `19/02/28` [fix] ImageUtils#calculateInSampleSize. Publish v1.23.6. diff --git a/README-CN.md b/README-CN.md index 00f811aee2..5c85dca1fe 100644 --- a/README-CN.md +++ b/README-CN.md @@ -40,12 +40,16 @@ ## [Change Log][changeLog.md] +## 打个小广告 + +欢迎加入我的小专栏「**[基你太美](https://xiaozhuanlan.com/Blankj)**」一起学习。 + [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[frame]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/auc_frame.png +[frame]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/auc_frame_cn.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.25.2-brightgreen.svg +[aucSvg]: https://github.com/Blankj/AndroidUtilCode/workflows/Android%20CI/badge.svg?branch=master [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/README.md b/README.md index de338f9347..9ae668e26e 100644 --- a/README.md +++ b/README.md @@ -40,12 +40,16 @@ If this project helps you a lot and you want to support the project's developmen ## [Change Log][changeLog.md] +## 打个小广告 + +欢迎加入我的小专栏「**[基你太美](https://xiaozhuanlan.com/Blankj)**」一起学习。 + [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png [frame]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/auc_frame.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.25.2-brightgreen.svg +[aucSvg]: https://github.com/Blankj/AndroidUtilCode/workflows/Android%20CI/badge.svg?branch=master [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/art/auc_frame.png b/art/auc_frame.png index 2382c03197..68c92d37b1 100644 Binary files a/art/auc_frame.png and b/art/auc_frame.png differ diff --git a/art/auc_frame_cn.png b/art/auc_frame_cn.png new file mode 100644 index 0000000000..2382c03197 Binary files /dev/null and b/art/auc_frame_cn.png differ diff --git a/art/auc_frame_general.png b/art/auc_frame_general.png deleted file mode 100644 index 3f6b866388..0000000000 Binary files a/art/auc_frame_general.png and /dev/null differ diff --git a/art/logo_static_bus.png b/art/logo_static_bus.png deleted file mode 100755 index 4f5308a13a..0000000000 Binary files a/art/logo_static_bus.png and /dev/null differ diff --git a/build.gradle b/build.gradle index f03d8e43b9..e0f0f36c87 100644 --- a/build.gradle +++ b/build.gradle @@ -1,50 +1,26 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ConfigUtils.init(gradle) repositories { - // use for debug plugin local - if (Config.depConfig.plugin.bus.useLocal || Config.depConfig.plugin.api.useLocal) { - maven() { - url new File("maven") - } - } - maven { - url 'https://maven.aliyun.com/repository/public' - name 'replace jcenter() and mavenCentral()' - } - maven { - url 'https://maven.aliyun.com/repository/jcenter' - name 'replace jcenter()' - } - maven { - url 'https://maven.aliyun.com/repository/google' - name 'replace google()' - } + mavenLocal() google() + mavenCentral() jcenter() } dependencies { for (def entrySet : ConfigUtils.getApplyPlugins().entrySet()) { - classpath entrySet.value.dep + classpath entrySet.value.path } } } allprojects { repositories { - maven { - url 'https://maven.aliyun.com/repository/public' - name 'replace jcenter() and mavenCentral()' - } - maven { - url 'https://maven.aliyun.com/repository/jcenter' - name 'replace jcenter()' - } - maven { - url 'https://maven.aliyun.com/repository/google' - name 'replace google()' - } + mavenLocal() + maven { url "https://jitpack.io" } google() + mavenCentral() jcenter() } @@ -52,9 +28,9 @@ allprojects { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' resolutionStrategy.eachDependency { - if (it.requested.group == 'com.android.support' - && !it.requested.name.contains('multidex')) { - it.useVersion Config.support_version + if (it.requested.group == 'com.android.support' && !it.requested.name.contains( + 'multidex')) { + it.useVersion Config.supportVersion } } } @@ -62,4 +38,4 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir -} +} \ No newline at end of file diff --git a/buildApp.gradle b/buildApp.gradle index 1c87fdae14..93f0b9b1d4 100644 --- a/buildApp.gradle +++ b/buildApp.gradle @@ -1,35 +1,41 @@ +apply plugin: "com.android.application" + apply { - plugin "com.android.application" - plugin "kotlin-android" - plugin "kotlin-android-extensions" - if (Config.depConfig.plugin.bus.isApply) { - plugin "com.blankj.bus" + from "${rootDir.path}/buildCommon.gradle" + from "${rootDir.path}/config/flavor.gradle" + if (Config.plugins.plugin_api.isApply) { + plugin Config.plugins.plugin_api.id } - if (Config.depConfig.plugin.api.isApply) { - plugin "com.blankj.api" + if (Config.plugins.plugin_bus.isApply) { + plugin Config.plugins.plugin_bus.id } } configSigning() configApkName() +//if (PluginConfig.plugin_bus.isApply) { +// bus { +// onlyScanLibRegex = '^([:]|(com\\.blankj)).+$' +// } +//} +// +//if (PluginConfig.plugin_api.isApply) { +// api { +// onlyScanLibRegex = '^([:]|(com\\.blankj)).+$' +// } +//} + android { - compileSdkVersion Config.compileSdkVersion defaultConfig { - minSdkVersion 16 - versionCode Config.versionCode - versionName Config.versionName applicationId Config.applicationId + suffix targetSdkVersion Config.targetSdkVersion multiDexEnabled true - resValue "string", "app_name", Config.appName + suffix } buildTypes { - debug { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } + debug {} + release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' @@ -46,33 +52,42 @@ android { maxProcessCount 8 dexInProcess = true } -} + productFlavors { + dev { + applicationIdSuffix ".dev" + versionNameSuffix "-dev" + resValue "string", "app_name", Config.appName + suffix + "-dev" + } + + production { + resValue "string", "app_name", Config.appName + suffix + } + } +} dependencies { // LeakCanary - debugImplementation Config.depConfig.leakcanary.android.dep - debugImplementation Config.depConfig.leakcanary.support_fragment.dep - releaseImplementation Config.depConfig.leakcanary.android_no_op.dep + debugImplementation Config.libs.leakcanary.path - debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:1.1.8' - releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:1.1.8' + debugImplementation Config.modules.lib_utildebug.dep + releaseImplementation Config.modules.lib_utildebug_no_op.dep // 根据 Config.pkgConfig 来依赖所有 pkg for (def entrySet : ConfigUtils.getApplyPkgs().entrySet()) { api entrySet.value.dep } - // 如果 Config.pkgConfig 不为空,说明可能导入了部分 pkg, - // 那么可能有些 api 没有实现,需要导入 mock 层的 api - if (!Config.pkgConfig.isEmpty()) { - api Config.depConfig.feature.mock.dep + if (Config.modules.feature_mock.isApply) { + api ModuleConfig.modules.feature_mock.dep } } def getSuffix() { - if (project.path == ":feature:launcher:app") return "" - return project.path.replace(":", "_").substring(":feature".length(), project.path.length() - ":app".length()) + if (project.name == "feature_launcher_app") return "" + return "." + project. + name. + substring("feature_".length(), project.name.length() - "_app".length()) } def configSigning() { @@ -102,12 +117,14 @@ def configApkName() { if (variant.buildType.name != "debug") { def artifact = variant.getPackageApplicationProvider().get() artifact.outputDirectory = new File("${rootDir.path}/apk") - artifact.outputScope.apkDatas.forEach { apkData -> - apkData.outputFileName = "util" + suffix + - (variant.flavorName == "" ? "" : ("_" + variant.flavorName)) + - "_" + variant.versionName.replace(".", "_") + - "_" + variant.buildType.name + - ".apk" + variant.outputs.each { + it.outputFileName = "util" + suffix + + (variant.flavorName == "" ? "" : ("_" + variant.flavorName)) + + "_" + + variant.versionName.replace(".", "_") + + "_" + + variant.buildType.name + + ".apk" } } } diff --git a/buildCommon.gradle b/buildCommon.gradle new file mode 100644 index 0000000000..2cba3ffea2 --- /dev/null +++ b/buildCommon.gradle @@ -0,0 +1,30 @@ +apply { + plugin "kotlin-android" + plugin "kotlin-android-extensions" +} + +android { + compileSdkVersion Config.compileSdkVersion + defaultConfig { + minSdkVersion Config.minSdkVersion + versionCode Config.versionCode + versionName Config.versionName + consumerProguardFiles 'proguard-rules.pro' + } + + buildTypes { + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + lintOptions { + abortOnError false + } +} \ No newline at end of file diff --git a/buildLib.gradle b/buildLib.gradle index f6342eea02..aed207cbee 100644 --- a/buildLib.gradle +++ b/buildLib.gradle @@ -1,43 +1,13 @@ -apply { - plugin "com.android.library" - plugin "kotlin-android" - plugin "kotlin-android-extensions" -} - -android { - compileSdkVersion Config.compileSdkVersion - defaultConfig { - minSdkVersion Config.minSdkVersion - versionCode Config.versionCode - versionName Config.versionName - consumerProguardFiles 'proguard-rules.pro' - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - consumerProguardFiles 'proguard-rules.pro' - } - } - - lintOptions { - abortOnError false - } -} - -afterEvaluate { - generateReleaseBuildConfig.enabled = false - generateDebugBuildConfig.enabled = false -} +apply plugin: "com.android.library" +apply from: "${rootDir.path}/buildCommon.gradle" dependencies { - if (project.name == 'pkg' || project.name == 'mock') { + if (project.name.endsWith("_pkg") || project.name.endsWith("_mock")) { // if module's name equals 'pkg', api all of export for (def entrySet : ConfigUtils.getApplyExports().entrySet()) { api entrySet.value.dep } - } else if (project.name == 'export') { - api Config.depConfig.lib.common.dep + } else if (project.name.endsWith("_export")) { + api Config.modules.lib_common.dep } } \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 37285c1c20..349aed4fec 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -12,12 +12,12 @@ gradlePlugin { plugins { readmeCore { id = 'readme-core' - implementationClass = 'com.blankj.plugin.ReadmeCorePlugin' + implementationClass = 'com.blankj.plugin.readme.ReadmeCorePlugin' } readmeSub { id = 'readme-sub' - implementationClass = 'com.blankj.plugin.ReadmeSubPlugin' + implementationClass = 'com.blankj.plugin.readme.ReadmeSubPlugin' } } } diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle new file mode 100644 index 0000000000..8a313c3b99 --- /dev/null +++ b/buildSrc/settings.gradle @@ -0,0 +1,8 @@ +//dependencyResolutionManagement { +// repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) +// repositories { +// google() +// mavenCentral() +// jcenter() // Warning: this repository is going to shut down soon +// } +//} \ No newline at end of file diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index 85859adde4..9a8d69d659 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -1,114 +1,89 @@ -/** - *
- * author: blankj - * blog : http://blankj.com - * time : 2019/07/13 - * desc : - *- */ class Config { static applicationId = 'com.blankj.androidutilcode' static appName = 'Util' - static compileSdkVersion = 27 + static compileSdkVersion = 29 static minSdkVersion = 14 - static targetSdkVersion = 27 - static versionCode = 1_025_002 - static versionName = '1.25.2'// E.g. 1.9.72 => 1,009,072 + static targetSdkVersion = 29 + static versionCode = 1_031_001 + static versionName = '1.31.1'// E.g. 1.9.72 => 1,009,072 // lib version - static kotlin_version = '1.3.10' - static support_version = '27.1.1' - static leakcanary_version = '1.6.3' - - // appConfig 配置的是可以跑 app 的模块,git 提交务必只包含 launcher - static appConfig = ['launcher'] - // pkgConfig 配置的是要依赖的功能包,为空则依赖全部,git 提交务必为空 - static pkgConfig = [] - - static depConfig = [ - plugin : [ - gradle : new DepConfig("com.android.tools.build:gradle:3.3.0"), - kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"), - maven : new DepConfig("com.github.dcendents:android-maven-gradle-plugin:2.1"),// 上传到 maven - bintray: new DepConfig("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"),// 上传到 bintray - traute : new DepConfig("tech.harmonysoft:traute-gradle:1.1.10"),// 注解转非空判断 - - // 本地第一次上传插件新的版本需设置 useLocal = true, isApply = false - // 本地上传成功之后 isApply = true 即可应用插件来调试,后续版本更新无需设置 isApply = false - // 发布版本的话把 useLocal = false, isApply = false,发布成功后 isApply = true 即可使用远程库版本 - api : new DepConfig(false/*是否本地调试*/, "com.blankj:api-gradle-plugin:1.0", true/*是否使用插件*/), - bus : new DepConfig(false/*是否本地调试*/, "com.blankj:bus-gradle-plugin:2.0", true/*是否使用插件*/), - ], - - api_gradle_plugin: new DepConfig(":plugin:api-gradle-plugin", false), - bus_gradle_plugin: new DepConfig(":plugin:bus-gradle-plugin", false), - - feature : [ - mock : new DepConfig(":feature:mock"), - - launcher: [ - app: new DepConfig(":feature:launcher:app") - ], - - main : [ - app: new DepConfig(":feature:main:app"), - pkg: new DepConfig(":feature:main:pkg"), - ], + static gradlePluginVersion = '4.1.0' + static kotlinVersion = '1.3.72' + static androidxVersion = '1.0.0' + + static modules = [ + /*Don't delete this line*/ + /*Generated by "module_config.json"*/ + plugin_api_gradle_plugin : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/api-gradle-plugin"), + plugin_bus_gradle_plugin : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/bus-gradle-plugin"), + plugin_lib_base_transform : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/lib/base-transform", remotePath: "com.blankj:base-transform:1.0"), + plugin_buildSrc_plugin : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/buildSrc-plugin"), + feature_mock : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/mock"), + feature_launcher_app : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/launcher/app"), + feature_main_app : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/main/app"), + feature_main_pkg : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/main/pkg"), + feature_subutil_app : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/subutil/app"), + feature_subutil_pkg : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/subutil/pkg"), + feature_subutil_export : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/subutil/export"), + feature_utilcode_app : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/utilcode/app"), + feature_utilcode_pkg : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/utilcode/pkg"), + feature_utilcode_export : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/utilcode/export", remotePath: "com.blankj:utilcode-export:1.1"), + lib_base : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/base"), + lib_common : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/common"), + lib_subutil : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/subutil"), + lib_utilcode : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utilcode", remotePath: "com.blankj:utilcodex:$Config.versionName"), + lib_utildebug : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utildebug"), + lib_utildebug_no_op : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utildebug-no-op"), + /*Don't delete this line*/ + ] - subutil : [ - app : new DepConfig(":feature:subutil:app"), - pkg : new DepConfig(":feature:subutil:pkg"), - export: new DepConfig(":feature:subutil:export"), - ], + static plugins = [ + plugin_gradle : new PluginConfig(path: "com.android.tools.build:gradle:$gradlePluginVersion"), + plugin_kotlin : new PluginConfig(path: "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"), + // 上传到 maven + plugin_maven : new PluginConfig(path: "com.github.dcendents:android-maven-gradle-plugin:2.1", id: "com.github.dcendents.android-maven"), + + // 上传新版本插件更新 path 中的版本号,并设置 isApply = false + // 通过 mavenLocal 上传本地版本,设置 isApply = true 即可应用插件来调试,最后通过 bintrayUpload 来发布插件 + plugin_api : new PluginConfig(isApply: true, useLocal: false, path: "com.blankj:api-gradle-plugin:1.5", id: "com.blankj.api"), + //./gradlew clean :plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal + //./gradlew clean :plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter + plugin_bus : new PluginConfig(isApply: true, useLocal: false, path: "com.blankj:bus-gradle-plugin:2.6", id: "com.blankj.bus"), + //./gradlew clean :plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal + //./gradlew clean :plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter + plugin_buildSrc: new PluginConfig(isApply: false, useLocal: false, path: "com.blankj:buildSrc-plugin:1.0", id: "com.blankj.buildSrc"), + //./gradlew clean :plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal + //./gradlew clean :plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter + ] - utilcode: [ - app : new DepConfig(":feature:utilcode:app"), - pkg : new DepConfig(":feature:utilcode:pkg"), - export: new DepConfig(":feature:utilcode:export"), - ], - ], + static libs = [ + androidx_appcompat : new LibConfig(path: "androidx.appcompat:appcompat:$androidxVersion"), + androidx_material : new LibConfig(path: "com.google.android.material:material:$androidxVersion"), + androidx_multidex : new LibConfig(path: "androidx.multidex:multidex:2.0.0"), + androidx_constraint: new LibConfig(path: "androidx.constraintlayout:constraintlayout:1.1.3"), - lib : [ - base : new DepConfig(":lib:base"), - common : new DepConfig(":lib:common"), - subutil : new DepConfig(":lib:subutil"), - utilcode : new DepConfig(true/*是否本地调试*/, ":lib:utilcode", "com.blankj:utilcode:$versionName"), - utildebug: new DepConfig(true/*是否本地调试*/, ":lib:utildebug", "com.blankj:utildebug:$versionName"), - ], + kotlin : new LibConfig(path: "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"), - support : [ - appcompat_v7: new DepConfig("com.android.support:appcompat-v7:$support_version"), - design : new DepConfig("com.android.support:design:$support_version"), - multidex : new DepConfig("com.android.support:multidex:1.0.2"), - constraint : new DepConfig("com.android.support.constraint:constraint-layout:1.1.3"), - ], + leakcanary : new LibConfig(path: "com.squareup.leakcanary:leakcanary-android:2.1"), - kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"), + free_proguard : new LibConfig(path: "com.blankj:free-proguard:1.0.2"), + swipe_panel : new LibConfig(path: "com.blankj:swipe-panel:1.2"), - leakcanary : [ - android : new DepConfig("com.squareup.leakcanary:leakcanary-android:$leakcanary_version"), - android_no_op : new DepConfig("com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version"), - support_fragment: new DepConfig("com.squareup.leakcanary:leakcanary-support-fragment:$leakcanary_version"), - ], + gson : new LibConfig(path: "com.google.code.gson:gson:2.8.5"), + glide : new LibConfig(path: "com.github.bumptech.glide:glide:4.7.1"), + retrofit : new LibConfig(path: "com.squareup.retrofit2:retrofit:2.4.0"), + commons_io : new LibConfig(path: "commons-io:commons-io:2.6"), - free_proguard : new DepConfig("com.blankj:free-proguard:1.0.1"), - swipe_panel : new DepConfig("com.blankj:swipe-panel:1.1"), + eventbus_lib : new LibConfig(path: "org.greenrobot:eventbus:3.1.1"), + eventbus_processor : new LibConfig(path: "org.greenrobot:eventbus-annotation-processor:3.0.1"), - gson : new DepConfig("com.google.code.gson:gson:2.8.2"), - glide : new DepConfig("com.github.bumptech.glide:glide:4.7.1"), - retrofit : new DepConfig("com.squareup.retrofit2:retrofit:2.4.0"), - commons_io : new DepConfig("commons-io:commons-io:2.6"), - eventbus : [ - lib : new DepConfig("org.greenrobot:eventbus:3.1.1"), - processor: new DepConfig("org.greenrobot:eventbus-annotation-processor:3.0.1") - ], + photo_view : new LibConfig(path: "com.github.chrisbanes:PhotoView:2.0.0"), - test : [ - junit : new DepConfig("junit:junit:4.12"), - robolectric: new DepConfig("org.robolectric:robolectric:4.2"), - ], + test_junit : new LibConfig(path: "junit:junit:4.12"), + test_robolectric : new LibConfig(path: "org.robolectric:robolectric:4.3.1"), ] } -//./gradlew clean :lib:utilcode:bintrayUpload \ No newline at end of file +//./gradlew clean :lib_utilcode:bintrayUpload \ No newline at end of file diff --git a/buildSrc/src/main/groovy/ConfigUtils.groovy b/buildSrc/src/main/groovy/ConfigUtils.groovy index f202f25a35..6a09d2f2d9 100644 --- a/buildSrc/src/main/groovy/ConfigUtils.groovy +++ b/buildSrc/src/main/groovy/ConfigUtils.groovy @@ -1,16 +1,7 @@ -import org.apache.commons.io.FileUtils -import org.gradle.BuildListener -import org.gradle.BuildResult import org.gradle.api.Project import org.gradle.api.ProjectEvaluationListener import org.gradle.api.ProjectState -import org.gradle.api.Task -import org.gradle.api.execution.TaskExecutionListener -import org.gradle.api.initialization.Settings import org.gradle.api.invocation.Gradle -import org.gradle.api.tasks.TaskState - -import java.text.SimpleDateFormat /** *
@@ -22,234 +13,87 @@ import java.text.SimpleDateFormat
*/
class ConfigUtils {
- static getApplyPlugins() {
- def plugins = getDepConfigByFilter(new DepConfigFilter() {
- @Override
- boolean accept(String name, DepConfig config) {
- if (!name.startsWith("plugin.")) return false
- if (!config.isApply) return false
- return true
- }
- })
- GLog.d("getApplyPlugins = ${GLog.object2String(plugins)}")
- return plugins
+ static init(Gradle gradle) {
+ generateDep(gradle)
+ addCommonGradle(gradle)
+ TaskDurationUtils.init(gradle)
}
- static getApplyPkgs() {
- def applyPkgs = getDepConfigByFilter(new DepConfigFilter() {
- @Override
- boolean accept(String name, DepConfig config) {
- if (!config.isApply) return false
- return name.endsWith(".pkg")
+ /**
+ * 根据 depConfig 生成 dep
+ */
+ private static void generateDep(Gradle gradle) {
+ def configs = [:]
+ for (Map.Entry entry : Config.modules.entrySet()) {
+ def (name, config) = [entry.key, entry.value]
+ if (config.useLocal) {
+ config.dep = gradle.rootProject.findProject(name)
+ } else {
+ config.dep = config.remotePath
}
- })
- GLog.d("getApplyPkgs = ${GLog.object2String(applyPkgs)}")
- return applyPkgs
+ configs.put(name, config)
+ }
+ GLog.l("generateDep = ${GLog.object2String(configs)}")
}
- static getApplyExports() {
- def applyExports = getDepConfigByFilter(new DepConfigFilter() {
+ private static addCommonGradle(Gradle gradle) {
+ gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
@Override
- boolean accept(String name, DepConfig config) {
- if (!config.isApply) return false
- return name.endsWith(".export")
- }
- })
- GLog.d("getApplyExports = ${GLog.object2String(applyExports)}")
- return applyExports
- }
-
- static addBuildListener(Gradle gradle) {
- gradle.addBuildListener(new ConfigBuildListener())
- }
-
- private static class ConfigBuildListener implements BuildListener {
-
- private List taskInfoList = []
- private long startBuildMillis
-
- @Override
- void buildStarted(Gradle gradle) {}
-
- @Override
- void settingsEvaluated(Settings settings) {
- startBuildMillis = System.currentTimeMillis()
- GLog.d("settingsEvaluated")
- includeModule(settings)
- }
-
- @Override
- void projectsLoaded(Gradle gradle) {
- GLog.d("projectsLoaded")
- generateDep(gradle)
-
- gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
- @Override
- void beforeEvaluate(Project project) {
- if (project.subprojects.isEmpty()) {
- if (project.path.contains(":plugin:")) {
- return
- }
- if (project.name == "app") {
- GLog.l(project.toString() + " applies buildApp.gradle")
- project.apply {
- from "${project.rootDir.path}/buildApp.gradle"
- }
- } else {
- GLog.l(project.toString() + " applies buildLib.gradle")
- project.apply {
- from "${project.rootDir.path}/buildLib.gradle"
- }
- }
- }
- }
-
- @Override
- void afterEvaluate(Project project, ProjectState projectState) {
- }
- })
- }
-
- @Override
- void projectsEvaluated(Gradle gradle) {
- GLog.d("projectsEvaluated")
-
- gradle.addListener(new TaskExecutionListener() {
- @Override
- void beforeExecute(Task task) {
- task.ext.startTime = System.currentTimeMillis()
+ void beforeEvaluate(Project project) {
+ // 在 project 的 build.gradle 前 do sth.
+ if (project.name.contains("plugin")) {
+ return
}
-
- @Override
- void afterExecute(Task task, TaskState state) {
- def exeDuration = System.currentTimeMillis() - task.ext.startTime
- if (exeDuration >= 100) {
- taskInfoList.add(new TaskInfo(task, exeDuration))
+ if (project.name.endsWith("_app")) {
+ GLog.l(project.toString() + " applies buildApp.gradle")
+ project.apply {
+ from "${project.rootDir.path}/buildApp.gradle"
}
- }
- })
- }
-
- @Override
- void buildFinished(BuildResult result) {
- GLog.d("buildFinished")
- if (!taskInfoList.isEmpty()) {
- Collections.sort(taskInfoList, new Comparator() {
- @Override
- int compare(TaskInfo t, TaskInfo t1) {
- return t1.exeDuration - t.exeDuration
+ } else {
+ GLog.l(project.toString() + " applies buildLib.gradle")
+ project.apply {
+ from "${project.rootDir.path}/buildLib.gradle"
}
- })
- StringBuilder sb = new StringBuilder()
- int buildSec = (System.currentTimeMillis() - startBuildMillis) / 1000;
- int m = buildSec / 60;
- int s = buildSec % 60;
- def timeInfo = (m == 0 ? "${s}s" : "${m}m ${s}s (${buildSec}s)")
- sb.append("BUILD FINISHED in $timeInfo\n")
- taskInfoList.each {
- sb.append(String.format("%7sms %s\n", it.exeDuration, it.task.path))
}
- def content = sb.toString()
- GLog.l(content)
- File file = new File(result.gradle.rootProject.buildDir.getAbsolutePath(),
- "build_time_records_" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".txt")
- FileUtils.write(file, content)
}
- }
- /**
- * 在 settings.gradle 中 根据 appConfig 和 pkgConfig 来 include 本地模块
- */
- private static includeModule(Settings settings) {
- if (Config.pkgConfig.isEmpty()) {
- Config.depConfig.feature.mock.isApply = false
+ @Override
+ void afterEvaluate(Project project, ProjectState state) {
+ // 在 project 的 build.gradle 末 do sth.
}
- def config = getDepConfigByFilter(new DepConfigFilter() {
- @Override
- boolean accept(String name, DepConfig config) {
- if (name.endsWith('.app')) {
- def appName = name.substring('feature.'.length(), name.length() - 4)
- if (!Config.appConfig.contains(appName)) {
- config.isApply = false
- }
- }
- if (name.endsWith('.pkg')) {
- if (!Config.pkgConfig.isEmpty()) {
- def pkgName = name.substring('feature.'.length(), name.length() - 4)
- if (!Config.pkgConfig.contains(pkgName)) {
- config.isApply = false
- }
- }
- }
+ })
+ }
- if (!config.isApply) return false
- if (!config.useLocal) return false
- if (config.localPath == "") return false
- return true
- }
- }).each { _, cfg ->
- settings.include cfg.localPath
+ static getApplyPlugins() {
+ def plugins = [:]
+ for (Map.Entry entry : Config.plugins.entrySet()) {
+ if (entry.value.isApply) {
+ plugins.put(entry.key, entry.value)
}
- GLog.l("includeModule = ${GLog.object2String(config)}")
- }
-
- /**
- * 根据 depConfig 生成 dep
- */
- private static generateDep(Gradle gradle) {
- def config = getDepConfigByFilter(new DepConfigFilter() {
- @Override
- boolean accept(String name, DepConfig config) {
- if (name.startsWith("plugin.")) {
- config.dep = config.remotePath
- return true
- }
- if (config.useLocal) {
- config.dep = gradle.rootProject.findProject(config.localPath)
- } else {
- config.dep = config.remotePath
- }
- return true
- }
- })
- GLog.l("generateDep = ${GLog.object2String(config)}")
}
+ GLog.d("getApplyPlugins = ${GLog.object2String(plugins)}")
+ return plugins
+ }
- private static class TaskInfo {
-
- Task task
- long exeDuration
-
- TaskInfo(Task task, long exeDuration) {
- this.task = task
- this.exeDuration = exeDuration
+ static getApplyPkgs() {
+ def pkgs = [:]
+ for (Map.Entry entry : Config.modules.entrySet()) {
+ if (entry.value.isApply && entry.key.endsWith("_pkg")) {
+ pkgs.put(entry.key, entry.value)
}
}
+ GLog.d("getApplyPkgs = ${GLog.object2String(pkgs)}")
+ return pkgs
}
- static Map getDepConfigByFilter(DepConfigFilter filter) {
- return _getDepConfigByFilter("", Config.depConfig, filter)
- }
-
- private static _getDepConfigByFilter(String namePrefix, Map map, DepConfigFilter filter) {
- def depConfigList = [:]
- for (Map.Entry entry : map.entrySet()) {
- def (name, value) = [entry.getKey(), entry.getValue()]
- if (value instanceof Map) {
- namePrefix += (name + '.')
- depConfigList.putAll(_getDepConfigByFilter(namePrefix, value, filter))
- namePrefix -= (name + '.')
- continue
- }
- def config = value as DepConfig
- if (filter == null || filter.accept(namePrefix + name, config)) {
- depConfigList.put(namePrefix + name, config)
+ static getApplyExports() {
+ def exports = [:]
+ for (Map.Entry entry : Config.modules.entrySet()) {
+ if (entry.value.isApply && entry.key.endsWith("_export")) {
+ exports.put(entry.key, entry.value)
}
}
- return depConfigList
- }
-
- interface DepConfigFilter {
- boolean accept(String name, DepConfig config);
+ GLog.d("getApplyExports = ${GLog.object2String(exports)}")
+ return exports
}
}
diff --git a/buildSrc/src/main/groovy/DepConfig.groovy b/buildSrc/src/main/groovy/DepConfig.groovy
deleted file mode 100644
index 86e56578cf..0000000000
--- a/buildSrc/src/main/groovy/DepConfig.groovy
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- *
- * author: blankj
- * blog : http://blankj.com
- * time : 2019/07/13
- * desc :
- *
- */
-class DepConfig {
- boolean useLocal // 是否使用本地的
- String localPath // 本地路径
- String remotePath// 远程路径
- boolean isApply // 是否应用
- String path // 最后的路径
- def dep // 根据条件生成项目最终的依赖项
-
- DepConfig(String path) {
- this(path, true)
- }
-
- DepConfig(String path, boolean isApply) {
- if (path.startsWith(":")) {
- this.useLocal = true
- this.localPath = path
- this.isApply = isApply
- } else {
- this.useLocal = false
- this.remotePath = path
- this.isApply = isApply
- }
- this.path = path
- }
-
- DepConfig(boolean useLocal, String path, boolean isApply) { // 自定义插件的构造函数
- this(useLocal, "", path, isApply)
- }
-
- DepConfig(boolean useLocal, String localPath, String remotePath) {
- this(useLocal, localPath, remotePath, true)
- }
-
- DepConfig(boolean useLocal, String localPath, String remotePath, boolean isApply) {
- this.useLocal = useLocal
- this.localPath = localPath
- this.remotePath = remotePath
- this.isApply = isApply
- this.path = useLocal ? localPath : remotePath
- }
-
- String getGroupId() {
- String[] splits = remotePath.split(":")
- return splits.length == 3 ? splits[0] : null
- }
-
- String getArtifactId() {
- String[] splits = remotePath.split(":")
- return splits.length == 3 ? splits[1] : null
- }
-
- String getVersion() {
- String[] splits = remotePath.split(":")
- return splits.length == 3 ? splits[2] : null
- }
-
-
- @Override
- String toString() {
- return "DepConfig { " +
- "useLocal = " + useLocal +
- (dep == null ? ", path = " + path : (", dep = " + dep)) +
- ", isApply = " + isApply +
- " }"
- }
-}
\ No newline at end of file
diff --git a/buildSrc/src/main/groovy/GLog.groovy b/buildSrc/src/main/groovy/GLog.groovy
index 012ca02850..6a5554fc46 100644
--- a/buildSrc/src/main/groovy/GLog.groovy
+++ b/buildSrc/src/main/groovy/GLog.groovy
@@ -91,7 +91,7 @@ class GLog {
sb.append("[")
list.each { v ->
if (v instanceof Map || v instanceof List) {
- sb.append(String.format("$LogConst.LINE_SEP%${deep++ * 8}s${object2String(v)},", "", k))
+ sb.append(String.format("$LogConst.LINE_SEP%${deep++ * 8}s${object2String(v)},", ""))
deep--
} else {
sb.append(String.format("$LogConst.LINE_SEP%${deep * 8}s$v,", ""))
diff --git a/buildSrc/src/main/groovy/LibConfig.groovy b/buildSrc/src/main/groovy/LibConfig.groovy
new file mode 100644
index 0000000000..6369553ba0
--- /dev/null
+++ b/buildSrc/src/main/groovy/LibConfig.groovy
@@ -0,0 +1,29 @@
+class LibConfig {
+
+ String path
+
+ String getGroupId() {
+ String[] splits = path.split(":")
+ return splits.length == 3 ? splits[0] : null
+ }
+
+ String getArtifactId() {
+ String[] splits = path.split(":")
+ return splits.length == 3 ? splits[1] : null
+ }
+
+ String getVersion() {
+ String[] splits = path.split(":")
+ return splits.length == 3 ? splits[2] : null
+ }
+
+ @Override
+ String toString() {
+ return "LibConfig { path = $path }"
+ }
+
+ static String getFlag(boolean b) {
+ return b ? "✅" : "❌"
+ }
+}
+
diff --git a/buildSrc/src/main/groovy/ModuleConfig.groovy b/buildSrc/src/main/groovy/ModuleConfig.groovy
new file mode 100644
index 0000000000..291abd8ffe
--- /dev/null
+++ b/buildSrc/src/main/groovy/ModuleConfig.groovy
@@ -0,0 +1,35 @@
+class ModuleConfig {
+
+ boolean isApply // 是否应用
+ boolean useLocal // 是否使用本地的
+ String localPath // 本地路径
+ String remotePath // 远程路径
+ def dep // 根据条件生成项目最终的依赖项
+
+ String getGroupId() {
+ String[] splits = remotePath.split(":")
+ return splits.length == 3 ? splits[0] : null
+ }
+
+ String getArtifactId() {
+ String[] splits = remotePath.split(":")
+ return splits.length == 3 ? splits[1] : null
+ }
+
+ String getVersion() {
+ String[] splits = remotePath.split(":")
+ return splits.length == 3 ? splits[2] : null
+ }
+
+ @Override
+ String toString() {
+ return "ModuleConfig { isApply = ${getFlag(isApply)}" +
+ ", dep = " + dep +
+ " }"
+ }
+
+ static String getFlag(boolean b) {
+ return b ? "✅" : "❌"
+ }
+}
+
diff --git a/buildSrc/src/main/groovy/PluginConfig.groovy b/buildSrc/src/main/groovy/PluginConfig.groovy
new file mode 100644
index 0000000000..3811c6a0ca
--- /dev/null
+++ b/buildSrc/src/main/groovy/PluginConfig.groovy
@@ -0,0 +1,35 @@
+final class PluginConfig {
+
+ boolean isApply = true // 是否应用
+ boolean useLocal // 是否使用本地的
+ String path // 插件路径
+ String id // 插件 ID
+
+ String getGroupId() {
+ String[] splits = path.split(":")
+ return splits.length == 3 ? splits[0] : null
+ }
+
+ String getArtifactId() {
+ String[] splits = path.split(":")
+ return splits.length == 3 ? splits[1] : null
+ }
+
+ String getVersion() {
+ String[] splits = path.split(":")
+ return splits.length == 3 ? splits[2] : null
+ }
+
+ @Override
+ String toString() {
+ return "PluginConfig { isApply = ${getFlag(isApply)}" +
+ ", useLocal = ${getFlag(useLocal)}" +
+ ", path = " + path +
+ ", id = " + id +
+ " }"
+ }
+
+ static String getFlag(boolean b) {
+ return b ? "✅" : "❌"
+ }
+}
\ No newline at end of file
diff --git a/buildSrc/src/main/groovy/TaskDurationUtils.groovy b/buildSrc/src/main/groovy/TaskDurationUtils.groovy
new file mode 100644
index 0000000000..6aacfcf30f
--- /dev/null
+++ b/buildSrc/src/main/groovy/TaskDurationUtils.groovy
@@ -0,0 +1,91 @@
+import org.gradle.BuildListener
+import org.gradle.BuildResult
+import org.gradle.api.Task
+import org.gradle.api.execution.TaskExecutionListener
+import org.gradle.api.initialization.Settings
+import org.gradle.api.invocation.Gradle
+import org.gradle.api.tasks.TaskState
+
+import java.text.SimpleDateFormat
+
+/**
+ *
+ * author: blankj
+ * blog : http://blankj.com
+ * time : 2019/11/22
+ * desc :
+ *
+ */
+class TaskDurationUtils {
+
+ static List taskInfoList = []
+ static long startMillis
+
+ static init(Gradle grd) {
+ startMillis = System.currentTimeMillis()
+ grd.addListener(new TaskExecutionListener() {
+ @Override
+ void beforeExecute(Task task) {
+ task.ext.startTime = System.currentTimeMillis()
+ }
+
+ @Override
+ void afterExecute(Task task, TaskState state) {
+ def exeDuration = System.currentTimeMillis() - task.ext.startTime
+ if (exeDuration >= 500) {
+ taskInfoList.add(new TaskInfo(task: task, exeDuration: exeDuration))
+ }
+ }
+ })
+ grd.addBuildListener(new BuildListener() {
+ @Override
+ void beforeSettings(Settings settings) {
+ super.beforeSettings(settings)
+ }
+
+ @Override
+ void buildStarted(Gradle gradle) {}
+
+ @Override
+ void settingsEvaluated(Settings settings) {}
+
+ @Override
+ void projectsLoaded(Gradle gradle) {}
+
+ @Override
+ void projectsEvaluated(Gradle gradle) {}
+
+ @Override
+ void buildFinished(BuildResult buildResult) {
+ if (!taskInfoList.isEmpty()) {
+ Collections.sort(taskInfoList, new Comparator() {
+ @Override
+ int compare(TaskInfo t, TaskInfo t1) {
+ return t1.exeDuration - t.exeDuration
+ }
+ })
+ StringBuilder sb = new StringBuilder()
+ int buildSec = (System.currentTimeMillis() - startMillis) / 1000;
+ int m = buildSec / 60;
+ int s = buildSec % 60;
+ def timeInfo = (m == 0 ? "${s}s" : "${m}m ${s}s (${buildSec}s)")
+ sb.append("BUILD FINISHED in $timeInfo\n")
+ taskInfoList.each {
+ sb.append(String.format("%7sms %s\n", it.exeDuration, it.task.path))
+ }
+ def content = sb.toString()
+ GLog.d(content)
+ File file = new File(grd.rootProject.buildDir.getAbsolutePath(),
+ "build_time_records_" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".txt")
+ file.getParentFile().mkdirs()
+ file.write(content)
+ }
+ }
+ })
+ }
+
+ private static class TaskInfo {
+ Task task
+ long exeDuration
+ }
+}
diff --git a/buildSrc/src/main/java/com/blankj/plugin/FormatUtils.groovy b/buildSrc/src/main/java/com/blankj/plugin/readme/FormatUtils.groovy
similarity index 96%
rename from buildSrc/src/main/java/com/blankj/plugin/FormatUtils.groovy
rename to buildSrc/src/main/java/com/blankj/plugin/readme/FormatUtils.groovy
index bc82b9f0f6..f617ff2eae 100644
--- a/buildSrc/src/main/java/com/blankj/plugin/FormatUtils.groovy
+++ b/buildSrc/src/main/java/com/blankj/plugin/readme/FormatUtils.groovy
@@ -1,9 +1,9 @@
-package com.blankj.plugin
+package com.blankj.plugin.readme
class FormatUtils {
static def LINE_SEP = System.getProperty("line.separator")
- static def LONG_SPACE = " "
+ static def LONG_SPACE = " "
static def format(File readmeCN) {
def sb = new StringBuilder(),
diff --git a/buildSrc/src/main/java/com/blankj/plugin/ReadmeCorePlugin.groovy b/buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeCorePlugin.groovy
similarity index 71%
rename from buildSrc/src/main/java/com/blankj/plugin/ReadmeCorePlugin.groovy
rename to buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeCorePlugin.groovy
index af86a19c6e..8f3cf47780 100644
--- a/buildSrc/src/main/java/com/blankj/plugin/ReadmeCorePlugin.groovy
+++ b/buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeCorePlugin.groovy
@@ -1,4 +1,4 @@
-package com.blankj.plugin
+package com.blankj.plugin.readme
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -30,10 +30,16 @@ class ReadmeCorePlugin implements Plugin {
def sb = new StringBuilder()
readmeCN.eachLine { line ->
if (line.contains("* ###")) {
- String utilsName = line.substring(line.indexOf("[") + 1, line.indexOf("Utils"))
- sb.append("* ### About ").append(utilsName).append(line.substring(line.indexOf(" -> ")))
+ if (line.contains("UtilsTransActivity")) {
+ sb.append(line)
+ } else {
+ String utilsName = line.substring(line.indexOf("[") + 1, line.indexOf("Utils"))
+ sb.append("* ### About ").append(utilsName).append(line.substring(line.indexOf(" -> ")))
+ }
} else if (line.contains(": ") && !line.contains("[")) {
sb.append(line.substring(0, line.indexOf(':')).trim())
+ } else if (line.contains("打个小广告") || line.contains("基你太美")) {
+ return
} else {
sb.append(line)
}
diff --git a/buildSrc/src/main/java/com/blankj/plugin/ReadmeExtension.groovy b/buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeExtension.groovy
similarity index 68%
rename from buildSrc/src/main/java/com/blankj/plugin/ReadmeExtension.groovy
rename to buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeExtension.groovy
index 91ca50af95..789e683c80 100644
--- a/buildSrc/src/main/java/com/blankj/plugin/ReadmeExtension.groovy
+++ b/buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeExtension.groovy
@@ -1,4 +1,4 @@
-package com.blankj.plugin
+package com.blankj.plugin.readme
class ReadmeExtension {
diff --git a/buildSrc/src/main/java/com/blankj/plugin/ReadmeSubPlugin.groovy b/buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeSubPlugin.groovy
similarity index 85%
rename from buildSrc/src/main/java/com/blankj/plugin/ReadmeSubPlugin.groovy
rename to buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeSubPlugin.groovy
index 36af34934e..bade51bbf4 100644
--- a/buildSrc/src/main/java/com/blankj/plugin/ReadmeSubPlugin.groovy
+++ b/buildSrc/src/main/java/com/blankj/plugin/readme/ReadmeSubPlugin.groovy
@@ -1,11 +1,8 @@
-package com.blankj.plugin
+package com.blankj.plugin.readme
import org.gradle.api.Plugin
import org.gradle.api.Project
-import static FormatUtils.LINE_SEP
-
-
class ReadmeSubPlugin implements Plugin {
@Override
@@ -30,9 +27,9 @@ class ReadmeSubPlugin implements Plugin {
static def readmeOfSubUtil2Eng(File readmeCN, File readmeEng) {
FormatUtils.format(readmeCN)
def lines = readmeCN.readLines("UTF-8"),
- sb = new StringBuilder("## How to use" + LINE_SEP
- + LINE_SEP +
- "You should copy the following classes which you want to use in your project." + LINE_SEP),
+ sb = new StringBuilder("## How to use" + FormatUtils.LINE_SEP
+ + FormatUtils.LINE_SEP +
+ "You should copy the following classes which you want to use in your project." + FormatUtils.LINE_SEP),
i = 3,
size = lines.size()
for (; i < size; ++i) {
@@ -45,7 +42,7 @@ class ReadmeSubPlugin implements Plugin {
} else {
sb.append(line)
}
- sb.append(LINE_SEP)
+ sb.append(FormatUtils.LINE_SEP)
}
readmeEng.write(sb.toString(), "UTF-8")
}
diff --git a/config/flavor.gradle b/config/flavor.gradle
new file mode 100644
index 0000000000..25c1801983
--- /dev/null
+++ b/config/flavor.gradle
@@ -0,0 +1,22 @@
+android {
+ flavorDimensions "env"
+ productFlavors {
+ dev {
+ dimension "env"
+ }
+
+ production {
+ dimension "env"
+ }
+ }
+
+ variantFilter { variant ->
+ def flavorNames = variant.flavors*.name
+ def buildTypeName = variant.buildType.name
+
+ // production 包不允许 debug 构建
+ if (flavorNames.contains("production") && buildTypeName.contains("debug")) {
+ variant.setIgnore(true)
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/publish.gradle b/config/publish.gradle
new file mode 100644
index 0000000000..7608215123
--- /dev/null
+++ b/config/publish.gradle
@@ -0,0 +1,226 @@
+/*
+ 1. add
+ signing.keyId=xx
+ signing.password=xx
+ signing.secretKeyRingFile=/Users/xx/secring.gpg
+ ossrhUsername=xx
+ ossrhPassword=xx
+ in root local.properties
+
+ 2. copy the file to the directory of gradle, and apply the file in the module
+ ext {
+ groupId = Config.modules.lib_utilcode.groupId
+ artifactId = Config.modules.lib_utilcode.artifactId
+ version = Config.modules.lib_utilcode.version
+ website = "https://github.com/Blankj/AndroidUtilCode"
+}
+ apply from: "${rootDir.path}/config/publish.gradle"
+
+ 3. execute following command to publish
+ ./gradlew :xxmodule:publish2Local -> upload to mavenLocal
+ ./gradlew :xxmodule:publish2Remote -> upload to mavenCentral
+*/
+
+apply plugin: 'maven-publish'
+apply plugin: 'signing'
+
+ext.multiPublishMode = true
+
+File localPropertiesFile = project.rootProject.file("local.properties");
+if (!localPropertiesFile.exists()) {
+ return
+}
+
+Properties properties = new Properties()
+properties.load(new FileInputStream(localPropertiesFile))
+properties.each { name, value -> ext[name] = value }
+
+afterEvaluate {
+ def ext = project.ext
+ publishing {
+ publications {
+ release(MavenPublication) {
+ groupId ext.groupId
+ artifactId ext.artifactId
+ version ext.version
+
+ if (isAndroidEnv(project)) {
+ if (project.ext.multiPublishMode) {
+ artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
+ artifact sourcesJar
+ } else {
+ from project.components.release
+ }
+ } else {
+ from project.components.java
+ }
+
+ pom {
+ name = ext.artifactId
+ description = ext.artifactId
+ url = ext.website
+
+ licenses {
+ license {
+ name = 'The Apache Software License, Version 2.0'
+ url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+ }
+ }
+ developers {
+ developer {
+ id = ext.ossrhUsername
+ name = ext.ossrhUsername
+ }
+ }
+ scm {
+ url = ext.website
+ connection = ext.website
+ developerConnection = ext.website + ".git"
+ }
+
+ if (project.ext.multiPublishMode) {
+ withXml {
+ def dependenciesNode = asNode().getAt('dependencies')[0] ?:
+ asNode().appendNode('dependencies')
+
+ configurations.api.getDependencies().each {
+ dep -> addDependency(project, dependenciesNode, dep, "compile")
+ }
+ configurations.implementation.getDependencies().each {
+ dep -> addDependency(project, dependenciesNode, dep, "runtime")
+ }
+ }
+ }
+ }
+ }
+ }
+
+ repositories {
+ maven {
+ // s01 is newest
+ def releasesUrl = "https://s01.oss.sonatype.org/content/repositories/releases/"
+ def snapshotUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
+ url = version.toUpperCase().endsWith('SNAPSHOT') ? snapshotUrl : releasesUrl
+
+ credentials {
+ username ossrhUsername
+ password ossrhPassword
+ }
+ }
+ }
+ }
+
+ signing {
+ sign publishing.publications
+ }
+}
+
+private void addDependency(Project project, def dependenciesNode, Dependency dep, String scope) {
+ if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified") {
+ return
+ }
+
+ final dependencyNode = dependenciesNode.appendNode('dependency')
+ dependencyNode.appendNode('scope', scope)
+
+ if (dep.version == 'unspecified') {
+ // 检测 module 中的 dependencies 是否有源码依赖
+ // 如果是源码依赖,而且没有在 config 中配置 remotePath,
+ // 那么发布到仓库,其他地方依赖该库时会找不到源码的那个库
+ println "publish -> module(unspecified) <${dep.group}:${dep.name}:${dep.version}>"
+ if (project.ext.groupId || project.ext.version) {
+ throw new GradleException("The module of <" + dep.name + "> should set groupId & version.")
+ }
+ // 源码依赖,但配置了 remotePath,让 pom 中写入 remotePath
+ println("publish -> module(wrapped) <${project.ext.groupId}:${name}:${project.ext.version}>")
+
+ dependencyNode.appendNode('groupId', project.ext.pomGroupID)
+ dependencyNode.appendNode('artifactId', dep.name)
+ dependencyNode.appendNode('version', project.ext.pomVersion)
+ } else {
+ dependencyNode.appendNode('groupId', dep.group)
+ dependencyNode.appendNode('artifactId', dep.name)
+ dependencyNode.appendNode('version', dep.version)
+ println("publish -> library <${dep.group}:${dep.name}:${dep.version}>")
+ }
+
+ if (!dep.transitive) {
+ // In case of non transitive dependency,
+ // all its dependencies should be force excluded from them POM file
+ final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
+ exclusionNode.appendNode('groupId', '*')
+ exclusionNode.appendNode('artifactId', '*')
+ } else if (!dep.properties.excludeRules.empty) {
+ // For transitive with exclusions, all exclude rules should be added to the POM file
+ final exclusions = dependencyNode.appendNode('exclusions')
+ dep.properties.excludeRules.each { ExcludeRule rule ->
+ final exclusionNode = exclusions.appendNode('exclusion')
+ exclusionNode.appendNode('groupId', rule.group ?: '*')
+ exclusionNode.appendNode('artifactId', rule.module ?: '*')
+ }
+ }
+}
+
+if (isAndroidEnv(project)) {
+ // This generates sources.jar
+ task sourcesJar(type: Jar) {
+ classifier = 'sources'
+ from android.sourceSets.main.java.source
+ }
+
+ task javadoc(type: Javadoc) {
+ source = android.sourceSets.main.java.source
+ classpath += configurations.compile
+ classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
+ }
+
+ task javadocJar(type: Jar, dependsOn: javadoc) {
+ classifier = 'javadoc'
+ from javadoc.destinationDir
+ }
+} else {
+ task sourcesJar(type: Jar, dependsOn: classes) {
+ classifier = 'sources'
+ from sourceSets.main.allSource
+ }
+
+ task javadocJar(type: Jar, dependsOn: javadoc) {
+ classifier = 'javadoc'
+ from javadoc.destinationDir
+ }
+}
+
+if (project.hasProperty("kotlin")) {
+ // Disable creating javadocs
+ project.tasks.withType(Javadoc) {
+ enabled = false
+ }
+}
+
+javadoc {
+ options {
+ encoding "UTF-8"
+ charSet 'UTF-8'
+ author true
+ version project.ext.version
+ links "http://docs.oracle.com/javase/7/docs/api"
+ title "${project.ext.artifactId} ${project.ext.version}"
+ }
+}
+
+artifacts {
+ archives javadocJar
+ archives sourcesJar
+}
+
+static def isAndroidEnv(Project project) {
+ return project.getPlugins().hasPlugin('com.android.application') || project.getPlugins().hasPlugin('com.android.library')
+}
+
+task publish2Local(type: GradleBuild) {
+ tasks = ['assemble', 'publishReleasePublicationToMavenLocal']
+}
+
+task publish2Remote(type: GradleBuild) {
+ tasks = ['assemble', 'publishReleasePublicationToMavenRepository']
+}
\ No newline at end of file
diff --git a/feature/launcher/app/build.gradle b/feature/launcher/app/build.gradle
index 9320e2df30..8f2b6d205d 100644
--- a/feature/launcher/app/build.gradle
+++ b/feature/launcher/app/build.gradle
@@ -1,5 +1,5 @@
apply plugin: 'kotlin-kapt'
dependencies {
- kapt Config.depConfig.eventbus.processor.dep
+ kapt Config.libs.eventbus_processor.path
}
\ No newline at end of file
diff --git a/feature/launcher/app/src/main/AndroidManifest.xml b/feature/launcher/app/src/main/AndroidManifest.xml
index b683051e68..4f033c06a6 100644
--- a/feature/launcher/app/src/main/AndroidManifest.xml
+++ b/feature/launcher/app/src/main/AndroidManifest.xml
@@ -7,12 +7,14 @@
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
+ android:supportsRtl="true"
android:theme="@style/AppTheme">
diff --git a/feature/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java b/feature/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java
index 405e3749a8..7dc22cee69 100644
--- a/feature/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java
+++ b/feature/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java
@@ -1,7 +1,5 @@
package com.blankj.launcher.app;
-import android.content.Context;
-
import com.blankj.common.CommonApplication;
/**
@@ -20,11 +18,6 @@ public static LauncherApp getInstance() {
return sInstance;
}
- @Override
- protected void attachBaseContext(Context base) {
- super.attachBaseContext(base);
- }
-
@Override
public void onCreate() {
super.onCreate();
diff --git a/feature/main/app/src/main/AndroidManifest.xml b/feature/main/app/src/main/AndroidManifest.xml
index 5ccc1079c0..bb8c3398d4 100644
--- a/feature/main/app/src/main/AndroidManifest.xml
+++ b/feature/main/app/src/main/AndroidManifest.xml
@@ -13,6 +13,7 @@
android:name="com.blankj.main.pkg.MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="user"
+ android:theme="@style/SplashTheme"
android:windowSoftInputMode="stateHidden">
diff --git a/feature/main/pkg/src/main/AndroidManifest.xml b/feature/main/pkg/src/main/AndroidManifest.xml
index f24a83ec2a..1cfdba8f69 100644
--- a/feature/main/pkg/src/main/AndroidManifest.xml
+++ b/feature/main/pkg/src/main/AndroidManifest.xml
@@ -1,11 +1,12 @@
+ package="com.blankj.main.pkg">
diff --git a/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt b/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt
index bfad337aab..b00aba9585 100644
--- a/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt
+++ b/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt
@@ -2,14 +2,17 @@ package com.blankj.main.pkg
import android.graphics.Color
import android.os.Bundle
-import android.support.v7.app.ActionBarDrawerToggle
import android.view.View
-import android.widget.ImageView
-import com.blankj.common.CommonDrawerActivity
+import androidx.appcompat.app.ActionBarDrawerToggle
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.subutil.export.api.SubUtilApi
-import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.export.api.UtilCodeApi
-import com.blankj.utilcode.util.*
+import com.blankj.utilcode.util.ApiUtils
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.ClickUtils
+import com.blankj.utilcode.util.CollectionUtils
import kotlinx.android.synthetic.main.activity_main.*
@@ -21,62 +24,51 @@ import kotlinx.android.synthetic.main.activity_main.*
* desc : MainActivity
* ```
*/
-class MainActivity : CommonDrawerActivity() {
+class MainActivity : CommonActivity() {
- override fun initData(bundle: Bundle?) {
-
- PermissionUtils.permission(PermissionConstants.CALENDAR)
- .callback(object : PermissionUtils.SimpleCallback {
- override fun onGranted() {
- LogUtils.e()
- }
+ override fun isSwipeBack(): Boolean {
+ return false
+ }
- override fun onDenied() {
- LogUtils.e()
- }
- })
+ override fun bindDrawer(): Boolean {
+ return true
}
override fun bindLayout(): Int {
return R.layout.activity_main
}
- private var view: ImageView? = null
+ override fun onCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(null)
+ super.onCreate(savedInstanceState)
+ }
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ setCommonItems(mainRv, CollectionUtils.newArrayList>(
+ CommonItemClick(R.string.core_util, true) {
+ ApiUtils.getApi(UtilCodeApi::class.java)?.startUtilCodeActivity(this)
+ },
+ CommonItemClick(R.string.sub_util, true) {
+ ApiUtils.getApi(SubUtilApi::class.java)?.startSubUtilActivity(this)
+ }
+ ))
+
launcherMainCtl.setExpandedTitleColor(Color.TRANSPARENT)
setSupportActionBar(launcherMainToolbar)
val toggle = ActionBarDrawerToggle(this,
- mBaseDrawerRootLayout,
+ drawerView.mBaseDrawerRootLayout,
launcherMainToolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close)
- mBaseDrawerRootLayout.addDrawerListener(toggle)
+ drawerView.mBaseDrawerRootLayout.addDrawerListener(toggle)
toggle.syncState()
- BarUtils.setStatusBarColor4Drawer(mBaseDrawerRootLayout, launcherMainFakeStatusBar, Color.TRANSPARENT, false)
+ BarUtils.setStatusBarColor4Drawer(drawerView.mBaseDrawerRootLayout, launcherMainFakeStatusBar, Color.TRANSPARENT, false)
BarUtils.addMarginTopEqualStatusBarHeight(launcherMainToolbar)
-
- applyDebouncingClickListener(
- launcherMainCoreUtilBtn,
- launcherMainSubUtilBtn
- )
- }
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.launcherMainCoreUtilBtn -> {
- ApiUtils.getApi(UtilCodeApi::class.java).startUtilCodeActivity(this)
- }
- R.id.launcherMainSubUtilBtn -> {
- ApiUtils.getApi(SubUtilApi::class.java).startSubUtilActivity(this)
- }
- }
}
override fun onBackPressed() {
- ActivityUtils.startHomeActivity()
+ ClickUtils.back2HomeFriendly("Press again to exit.")
}
}
diff --git a/feature/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt b/feature/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt
index 49d88f4f62..9f842cda06 100644
--- a/feature/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt
+++ b/feature/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt
@@ -1,31 +1,7 @@
package com.blankj.main.pkg
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonBackActivity
+import com.blankj.common.activity.CommonActivity
-class SplashActivity : CommonBackActivity() {
- override fun isSwipeBack(): Boolean {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
+class SplashActivity : CommonActivity() {
- override fun initData(bundle: Bundle?) {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
-
- override fun bindLayout(): Int {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
-
- override fun doBusiness() {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
-
- override fun onDebouncingClick(view: View) {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
}
\ No newline at end of file
diff --git a/feature/main/pkg/src/main/res/layout/activity_main.xml b/feature/main/pkg/src/main/res/layout/activity_main.xml
index 9d757f9ef8..3a33dd0f8e 100644
--- a/feature/main/pkg/src/main/res/layout/activity_main.xml
+++ b/feature/main/pkg/src/main/res/layout/activity_main.xml
@@ -1,16 +1,16 @@
-
-
-
-
-
-
+
+
-
+ app:layout_behavior="@string/appbar_scrolling_view_behavior" />
-
-
-
-
-
-
-
-
-
+
diff --git a/feature/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt b/feature/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt
index acb07aade4..9667490cf4 100644
--- a/feature/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt
+++ b/feature/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt
@@ -1,7 +1,7 @@
package com.blankj.subutil.app
import android.content.Context
-import com.blankj.lib.common.CommonApplication
+import com.blankj.common.CommonApplication
/**
diff --git a/feature/subutil/pkg/src/main/AndroidManifest.xml b/feature/subutil/pkg/src/main/AndroidManifest.xml
index ee03971457..198eb5c31b 100644
--- a/feature/subutil/pkg/src/main/AndroidManifest.xml
+++ b/feature/subutil/pkg/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
+
@@ -27,6 +28,10 @@
android:name=".feature.appStore.AppStoreActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop" />
+
> {
+ return CollectionUtils.newArrayList(
+ CommonItemClick(R.string.demo_app_store, true) {
+ AppStoreActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_battery, true) {
+ BatteryActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_country, true) {
+ CountryActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_dangerous, true) {
+ DangerousActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_location, true) {
+ LocationActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_pinyin, true) {
+ PinyinActivity.start(this)
+ }
)
}
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.subUtilAppStoreBtn -> AppStoreActivity.start(this)
- R.id.subUtilCountryBtn -> CountryActivity.start(this)
- R.id.subUtilDangerousBtn -> DangerousActivity.start(this)
- R.id.subUtilLocationBtn -> LocationActivity.start(this)
- R.id.subUtilPinyinBtn -> PinyinActivity.start(this)
- }
- }
}
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt
index 9f0009c677..e7c2953448 100644
--- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt
+++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt
@@ -2,23 +2,23 @@ package com.blankj.subutil.pkg.feature.appStore
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.subutil.pkg.R
import com.blankj.subutil.util.AppStoreUtils
import com.blankj.utilcode.util.ActivityUtils
-import kotlinx.android.synthetic.main.activity_app_store.*
+import com.blankj.utilcode.util.CollectionUtils
/**
* ```
* author: Blankj
* blog : http://blankj.com
* time : 17/02/01
- * desc : demo about PinyinUtils
+ * desc : demo about AppStore
* ```
*/
-class AppStoreActivity : CommonTitleActivity() {
+class AppStoreActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -27,29 +27,17 @@ class AppStoreActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_app_store)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_app_store
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_app_store
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(appStoreSystem)
- }
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.appStoreSystem -> {
- AppStoreUtils.getAppStoreIntent("com.tencent.mm")?.apply {
- ActivityUtils.startActivity(this)
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemClick(R.string.app_store_system, true) {
+ AppStoreUtils.getAppStoreIntent("com.tencent.mm").apply {
+ ActivityUtils.startActivity(this)
+ }
}
- }
- }
+ )
}
}
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/battery/BatteryActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/battery/BatteryActivity.kt
new file mode 100644
index 0000000000..8e04163c4f
--- /dev/null
+++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/battery/BatteryActivity.kt
@@ -0,0 +1,56 @@
+package com.blankj.subutil.pkg.feature.battery
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemTitle
+import com.blankj.subutil.pkg.R
+import com.blankj.subutil.util.BatteryUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ToastUtils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 20/03/31
+ * desc : demo about Battery
+ * ```
+ */
+class BatteryActivity : CommonActivity(), BatteryUtils.OnBatteryStatusChangedListener {
+
+ private val titleItem: CommonItemTitle = CommonItemTitle("", true);
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BatteryActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ override fun bindTitleRes(): Int {
+ return R.string.demo_battery
+ }
+
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(titleItem)
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ BatteryUtils.registerBatteryStatusChangedListener(this)
+ }
+
+ override fun onBatteryStatusChanged(status: BatteryUtils.Status) {
+ titleItem.title = status.toString()
+ ToastUtils.showShort(status.toString())
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ BatteryUtils.unregisterBatteryStatusChangedListener(this)
+ }
+}
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt
index 6395b0fa21..c2daa6ef50 100644
--- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt
+++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt
@@ -2,23 +2,22 @@ package com.blankj.subutil.pkg.feature.country
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemTitle
import com.blankj.subutil.pkg.R
import com.blankj.subutil.util.CountryUtils
-import com.blankj.utilcode.util.SpanUtils
-import kotlinx.android.synthetic.main.activity_country.*
+import com.blankj.utilcode.util.CollectionUtils
/**
* ```
* author: Blankj
* blog : http://blankj.com
* time : 17/02/01
- * desc : demo about PinyinUtils
+ * desc : demo about Country
* ```
*/
-class CountryActivity : CommonTitleActivity() {
+class CountryActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -27,26 +26,16 @@ class CountryActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_country)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_country
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_country
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- SpanUtils.with(countryAboutTv)
- .appendLine("getCountryCodeBySim: " + CountryUtils.getCountryCodeBySim("Default"))
- .appendLine("getCountryCodeByLanguage: " + CountryUtils.getCountryCodeByLanguage("Default"))
- .appendLine("getCountryBySim: " + CountryUtils.getCountryBySim())
- .appendLine("getCountryByLanguage: " + CountryUtils.getCountryByLanguage())
- .create()
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemTitle("getCountryCodeBySim", CountryUtils.getCountryCodeBySim("Default")),
+ CommonItemTitle("getCountryCodeByLanguage", CountryUtils.getCountryCodeByLanguage("Default")),
+ CommonItemTitle("getCountryBySim", CountryUtils.getCountryBySim()),
+ CommonItemTitle("getCountryByLanguage", CountryUtils.getCountryByLanguage())
+ )
}
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
}
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt
index 627416e255..cc5c60f470 100644
--- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt
+++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt
@@ -2,15 +2,16 @@ package com.blankj.subutil.pkg.feature.dangerous
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.helper.PermissionHelper
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemSwitch
import com.blankj.subutil.pkg.Config
import com.blankj.subutil.pkg.R
-import com.blankj.subutil.pkg.helper.PermissionHelper
import com.blankj.subutil.util.DangerousUtils
+import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.util.*
-import kotlinx.android.synthetic.main.activity_dangerous.*
/**
* ```
@@ -20,20 +21,19 @@ import kotlinx.android.synthetic.main.activity_dangerous.*
* desc : demo about dangerous
* ```
*/
-class DangerousActivity : CommonTitleActivity() {
+class DangerousActivity : CommonActivity() {
companion object {
fun start(context: Context) {
- PermissionHelper.requestStorage(object : PermissionHelper.OnPermissionGrantedListener {
- override fun onPermissionGranted() {
+ PermissionHelper.request(context, object : PermissionUtils.SimpleCallback {
+ override fun onGranted() {
val starter = Intent(context, DangerousActivity::class.java)
context.startActivity(starter)
}
- }, object : PermissionHelper.OnPermissionDeniedListener {
- override fun onPermissionDenied() {
- start(context)
+
+ override fun onDenied() {
}
- })
+ }, PermissionConstants.STORAGE, PermissionConstants.SMS)
}
}
@@ -47,78 +47,66 @@ class DangerousActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_dangerous)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_dangerous
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- dangerousInstallAppSilentBtn,
- dangerousUninstallAppSilentBtn,
- dangerousShutdownBtn,
- dangerousRebootBtn,
- dangerousReboot2RecoveryBtn,
- dangerousReboot2BootloaderBtn
- )
-
- if (AppUtils.isAppSystem()) {
- dangerousMobileDataEnabledCb.setOnCheckedChangeListener { buttonView, isChecked ->
- DangerousUtils.setMobileDataEnabled(isChecked)
- }
- } else {
- dangerousMobileDataEnabledCb.isEnabled = false
- }
- }
-
- override fun onResume() {
- super.onResume()
- dangerousMobileDataEnabledCb.isChecked = NetworkUtils.getMobileDataEnabled()
+ override fun bindTitleRes(): Int {
+ return R.string.demo_dangerous
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.dangerousInstallAppSilentBtn -> {
- if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
- ToastUtils.showShort(R.string.dangerous_app_install_tips)
- } else {
- if (!FileUtils.isFileExists(Config.TEST_APK_PATH)) {
- ReleaseInstallApkTask(listener).execute()
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemClick(R.string.dangerous_install_silent) {
+ if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
+ ToastUtils.showShort(R.string.dangerous_app_install_tips)
} else {
- listener.onReleased()
+ if (!FileUtils.isFileExists(Config.TEST_APK_PATH)) {
+ ReleaseInstallApkTask(listener).execute()
+ } else {
+ listener.onReleased()
+ }
}
- }
- }
- R.id.dangerousUninstallAppSilentBtn -> {
- if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
- if (DangerousUtils.uninstallAppSilent(Config.TEST_PKG, false)) {
- ToastUtils.showShort(R.string.dangerous_uninstall_successfully)
+ },
+ CommonItemClick(R.string.dangerous_uninstall_silent) {
+ if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
+ if (DangerousUtils.uninstallAppSilent(Config.TEST_PKG, false)) {
+ ToastUtils.showShort(R.string.dangerous_uninstall_successfully)
+ } else {
+ ToastUtils.showShort(R.string.dangerous_uninstall_unsuccessfully)
+ }
} else {
- ToastUtils.showShort(R.string.dangerous_uninstall_unsuccessfully)
+ ToastUtils.showShort(R.string.dangerous_app_uninstall_tips)
}
- } else {
- ToastUtils.showShort(R.string.dangerous_app_uninstall_tips)
+ },
+ CommonItemClick(R.string.dangerous_shutdown) {
+ ToastUtils.showShort(DangerousUtils.shutdown().toString())
+ },
+ CommonItemClick(R.string.dangerous_reboot) {
+ ToastUtils.showShort(DangerousUtils.reboot().toString())
+ },
+ CommonItemClick(R.string.dangerous_reboot_to_recovery) {
+ ToastUtils.showShort(DangerousUtils.reboot2Recovery().toString())
+ },
+ CommonItemClick(R.string.dangerous_reboot_to_bootloader) {
+ ToastUtils.showShort(DangerousUtils.reboot2Bootloader().toString())
+ },
+ CommonItemSwitch(
+ R.string.dangerous_data_enabled,
+ { NetworkUtils.getMobileDataEnabled() },
+ {
+ if (AppUtils.isAppSystem()) {
+ DangerousUtils.setMobileDataEnabled(it)
+ }
+ }
+ ),
+ CommonItemClick(R.string.dangerous_send_sms_silent) {
+ DangerousUtils.sendSmsSilent("10000", "sendSmsSilent")
}
- }
- R.id.dangerousShutdownBtn -> DangerousUtils.shutdown()
- R.id.dangerousRebootBtn -> DangerousUtils.reboot()
- R.id.dangerousReboot2RecoveryBtn -> DangerousUtils.reboot2Recovery()
- R.id.dangerousReboot2BootloaderBtn -> DangerousUtils.reboot2Bootloader()
- }
+ )
}
}
class ReleaseInstallApkTask(private val mListener: OnReleasedListener) : ThreadUtils.SimpleTask() {
override fun doInBackground() {
- ResourceUtils.copyFileFromAssets("test_install_silent", Config.TEST_APK_PATH)
+ ResourceUtils.copyFileFromAssets("test_install", Config.TEST_APK_PATH)
}
override fun onSuccess(result: Unit) {
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt
index b8e58bc3a3..8f4217c96c 100755
--- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt
+++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt
@@ -4,14 +4,15 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
-import android.os.Bundle
import android.os.IBinder
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.helper.PermissionHelper
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemTitle
import com.blankj.subutil.pkg.R
-import com.blankj.subutil.pkg.helper.PermissionHelper
-import com.blankj.utilcode.util.SpanUtils
-import kotlinx.android.synthetic.main.activity_location.*
+import com.blankj.utilcode.constant.PermissionConstants
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.PermissionUtils
/**
* ```
@@ -21,20 +22,27 @@ import kotlinx.android.synthetic.main.activity_location.*
* desc : demo about LocationUtils
* ```
*/
-class LocationActivity : CommonTitleActivity() {
+class LocationActivity : CommonActivity() {
+
+ private var lastLatitude: String = "unknown"
+ private var lastLongitude: String = "unknown"
+ private var latitude: String = "unknown"
+ private var longitude: String = "unknown"
+ private var country: String = "unknown"
+ private var locality: String = "unknown"
+ private var street: String = "unknown"
companion object {
fun start(context: Context) {
- PermissionHelper.requestLocation(object : PermissionHelper.OnPermissionGrantedListener {
- override fun onPermissionGranted() {
+ PermissionHelper.request(context, object : PermissionUtils.SimpleCallback {
+ override fun onGranted() {
val starter = Intent(context, LocationActivity::class.java)
context.startActivity(starter)
}
- }, object : PermissionHelper.OnPermissionDeniedListener {
- override fun onPermissionDenied() {
- start(context)
+
+ override fun onDenied() {
}
- })
+ }, PermissionConstants.LOCATION)
}
}
@@ -48,50 +56,43 @@ class LocationActivity : CommonTitleActivity() {
mLocationService.setOnGetLocationListener(object : LocationService.OnGetLocationListener {
override fun getLocation(lastLatitude: String, lastLongitude: String, latitude: String,
longitude: String, country: String, locality: String, street: String) {
+ this@LocationActivity.apply {
+ this.lastLatitude = lastLatitude
+ this.lastLongitude = lastLongitude
+ this.latitude = latitude
+ this.longitude = longitude
+ this.country = country
+ this.locality = locality
+ this.street = street
+ }
runOnUiThread {
- SpanUtils.with(locationAboutTv)
- .appendLine("lastLatitude: $lastLatitude")
- .appendLine("lastLongitude: $lastLongitude")
- .appendLine("latitude: $latitude")
- .appendLine("longitude: $longitude")
- .appendLine("getCountryName: $country")
- .appendLine("getLocality: $locality")
- .appendLine("getStreet: $street")
- .create()
+ itemsView.updateItems(bindItems())
}
}
})
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_location)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_location
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_location
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- SpanUtils.with(locationAboutTv)
- .appendLine("lastLatitude: unknown")
- .appendLine("lastLongitude: unknown")
- .appendLine("latitude: unknown")
- .appendLine("longitude: unknown")
- .appendLine("getCountryName: unknown")
- .appendLine("getLocality: unknown")
- .appendLine("getStreet: unknown")
- .create()
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemTitle("lastLatitude", lastLatitude),
+ CommonItemTitle("lastLongitude", lastLongitude),
+ CommonItemTitle("latitude", latitude),
+ CommonItemTitle("longitude", longitude),
+ CommonItemTitle("getCountryName", country),
+ CommonItemTitle("getLocality", locality),
+ CommonItemTitle("getStreet", street)
+ )
}
override fun doBusiness() {
bindService(Intent(this, LocationService::class.java), conn, Context.BIND_AUTO_CREATE)
}
- override fun onDebouncingClick(view: View) {}
-
override fun onDestroy() {
unbindService(conn)
super.onDestroy()
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt
index e13eadef59..648dcb295d 100644
--- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt
+++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt
@@ -2,12 +2,12 @@ package com.blankj.subutil.pkg.feature.pinyin
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemTitle
import com.blankj.subutil.pkg.R
import com.blankj.subutil.util.PinyinUtils
-import kotlinx.android.synthetic.main.activity_pinyin.*
+import com.blankj.utilcode.util.CollectionUtils
/**
* ```
@@ -17,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_pinyin.*
* desc : demo about PinyinUtils
* ```
*/
-class PinyinActivity : CommonTitleActivity() {
+class PinyinActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -26,39 +26,31 @@ class PinyinActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_pinyin)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_pinyin
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_pinyin
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ override fun bindItems(): MutableList> {
val surnames = "乐乘乜仇会便区单参句召员宓弗折曾朴查洗盖祭种秘繁缪能蕃覃解谌适都阿难黑"
val size = surnames.length
- val sb = StringBuilder("汉字转拼音: " + PinyinUtils.ccs2Pinyin("汉字转拼音", " ")
- + "\n获取首字母: " + PinyinUtils.getPinyinFirstLetters("获取首字母", " ")
- + "\n\n测试姓氏"
- + "\n澹台: " + PinyinUtils.getSurnamePinyin("澹台")
+ val sb = StringBuilder("澹台: " + PinyinUtils.getSurnamePinyin("澹台")
+ "\n尉迟: " + PinyinUtils.getSurnamePinyin("尉迟")
+ "\n万俟: " + PinyinUtils.getSurnamePinyin("万俟")
+ "\n单于: " + PinyinUtils.getSurnamePinyin("单于"))
for (i in 0 until size) {
val surname = surnames[i].toString()
sb.append(String.format(
- "\n%s 正确: %-6s 错误: %-6s",
+ "\n%s 正确: %-8s 错误: %-8s",
surname,
PinyinUtils.getSurnamePinyin(surname),
PinyinUtils.ccs2Pinyin(surname)
))
}
- pinyinAboutTv.text = sb.toString()
- }
-
- override fun doBusiness() {}
+ return CollectionUtils.newArrayList(
+ CommonItemTitle("汉字转拼音", PinyinUtils.ccs2Pinyin("汉字转拼音", " ")),
+ CommonItemTitle("获取首字母", PinyinUtils.getPinyinFirstLetters("获取首字母", " ")),
+ CommonItemTitle("测试姓氏", sb.toString())
- override fun onDebouncingClick(view: View) {}
-}
+ )
+ }
+}
\ No newline at end of file
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
deleted file mode 100644
index 45e67a4a0d..0000000000
--- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.blankj.subutil.pkg.helper
-
-import android.support.v7.app.AlertDialog
-import com.blankj.subutil.pkg.R
-import com.blankj.utilcode.util.ActivityUtils
-import com.blankj.utilcode.util.PermissionUtils
-import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2018/01/10
- * desc : helper about dialog
- * ```
- */
-object DialogHelper {
-
- fun showRationaleDialog(shouldRequest: ShouldRequest) {
- val topActivity = ActivityUtils.getTopActivity()
- if (topActivity == null || topActivity.isFinishing) return
- AlertDialog.Builder(topActivity)
- .setTitle(android.R.string.dialog_alert_title)
- .setMessage(R.string.permission_rationale_message)
- .setPositiveButton(android.R.string.ok) { dialog, which -> shouldRequest.again(true) }
- .setNegativeButton(android.R.string.cancel) { dialog, which -> shouldRequest.again(false) }
- .setCancelable(false)
- .create()
- .show()
-
- }
-
- fun showOpenAppSettingDialog() {
- val topActivity = ActivityUtils.getTopActivity()
- if (topActivity == null || topActivity.isFinishing) return
- AlertDialog.Builder(topActivity)
- .setTitle(android.R.string.dialog_alert_title)
- .setMessage(R.string.permission_denied_forever_message)
- .setPositiveButton(android.R.string.ok) { dialog, which -> PermissionUtils.launchAppDetailsSettings() }
- .setNegativeButton(android.R.string.cancel) { dialog, which -> }
- .setCancelable(false)
- .create()
- .show()
- }
-}
diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt
deleted file mode 100644
index 04864ce6d1..0000000000
--- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.blankj.subutil.pkg.helper
-
-import com.blankj.utilcode.constant.PermissionConstants
-import com.blankj.utilcode.util.LogUtils
-import com.blankj.utilcode.util.PermissionUtils
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2018/01/06
- * desc : helper about permission
- * ```
- */
-object PermissionHelper {
-
- fun requestStorage(listener: OnPermissionGrantedListener,
- deniedListener: OnPermissionDeniedListener) {
- request(listener, deniedListener, PermissionConstants.STORAGE)
- }
-
- fun requestLocation(listener: OnPermissionGrantedListener,
- deniedListener: OnPermissionDeniedListener) {
- request(listener, deniedListener, PermissionConstants.LOCATION)
- }
-
- private fun request(grantedListener: OnPermissionGrantedListener?,
- deniedListener: OnPermissionDeniedListener?,
- @PermissionConstants.Permission vararg permissions: String) {
- PermissionUtils.permission(*permissions)
- .rationale { shouldRequest -> DialogHelper.showRationaleDialog(shouldRequest) }
- .callback(object : PermissionUtils.FullCallback {
- override fun onGranted(permissionsGranted: List) {
- LogUtils.d(permissionsGranted)
- grantedListener?.onPermissionGranted()
- }
-
- override fun onDenied(permissionsDeniedForever: List, permissionsDenied: List) {
- LogUtils.d(permissionsDeniedForever, permissionsDenied)
- if (!permissionsDeniedForever.isEmpty()) {
- DialogHelper.showOpenAppSettingDialog()
- return
- }
- deniedListener?.onPermissionDenied()
- }
- })
- .request()
- }
-
- interface OnPermissionGrantedListener {
- fun onPermissionGranted()
- }
-
- interface OnPermissionDeniedListener {
- fun onPermissionDenied()
- }
-}
diff --git a/feature/subutil/pkg/src/main/res/layout/activity_app_store.xml b/feature/subutil/pkg/src/main/res/layout/activity_app_store.xml
deleted file mode 100755
index 967593131f..0000000000
--- a/feature/subutil/pkg/src/main/res/layout/activity_app_store.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/feature/subutil/pkg/src/main/res/layout/activity_country.xml b/feature/subutil/pkg/src/main/res/layout/activity_country.xml
deleted file mode 100755
index 7b15b777c2..0000000000
--- a/feature/subutil/pkg/src/main/res/layout/activity_country.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/feature/subutil/pkg/src/main/res/layout/activity_dangerous.xml b/feature/subutil/pkg/src/main/res/layout/activity_dangerous.xml
deleted file mode 100644
index 3d588ea326..0000000000
--- a/feature/subutil/pkg/src/main/res/layout/activity_dangerous.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/feature/subutil/pkg/src/main/res/layout/activity_location.xml b/feature/subutil/pkg/src/main/res/layout/activity_location.xml
deleted file mode 100755
index 5534245b4d..0000000000
--- a/feature/subutil/pkg/src/main/res/layout/activity_location.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
diff --git a/feature/subutil/pkg/src/main/res/layout/activity_pinyin.xml b/feature/subutil/pkg/src/main/res/layout/activity_pinyin.xml
deleted file mode 100755
index 7277d8e5c6..0000000000
--- a/feature/subutil/pkg/src/main/res/layout/activity_pinyin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/feature/subutil/pkg/src/main/res/layout/activity_util_sub.xml b/feature/subutil/pkg/src/main/res/layout/activity_util_sub.xml
deleted file mode 100644
index ab965931ca..0000000000
--- a/feature/subutil/pkg/src/main/res/layout/activity_util_sub.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/feature/subutil/pkg/src/main/res/values/strings.xml b/feature/subutil/pkg/src/main/res/values/strings.xml
index f1b6807964..e758c294a0 100644
--- a/feature/subutil/pkg/src/main/res/values/strings.xml
+++ b/feature/subutil/pkg/src/main/res/values/strings.xml
@@ -1,6 +1,7 @@
App Store Demo
+ Battery Demo
Country Demo
Dangerous Demo
LocationUtils Demo
@@ -21,5 +22,8 @@
Reboot
Reboot To Recovery
Reboot To Bootloader
+ Send SMS Silent
Mobile Data Enabled
+
+
\ No newline at end of file
diff --git a/feature/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt b/feature/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt
index 130d8148fa..42d2909041 100644
--- a/feature/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt
+++ b/feature/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt
@@ -1,6 +1,6 @@
package com.blankj.utilcode.app
-import com.blankj.lib.common.CommonApplication
+import com.blankj.common.CommonApplication
import com.blankj.utilcode.util.Utils
diff --git a/feature/utilcode/export/build.gradle b/feature/utilcode/export/build.gradle
index e69de29bb2..30e59272ee 100644
--- a/feature/utilcode/export/build.gradle
+++ b/feature/utilcode/export/build.gradle
@@ -0,0 +1,8 @@
+ext {
+ groupId = Config.modules.feature_utilcode_export.groupId
+ artifactId = Config.modules.feature_utilcode_export.artifactId
+ version = Config.modules.feature_utilcode_export.version
+ website = "https://github.com/Blankj/AndroidUtilCode"
+}
+//apply from: "${rootDir.path}/config/publish.gradle"
+//./gradlew :feature_utilcode_export:mavenLocal // 上传到本地 mavenLocal
\ No newline at end of file
diff --git a/feature/utilcode/pkg/src/main/AndroidManifest.xml b/feature/utilcode/pkg/src/main/AndroidManifest.xml
index 74d84c6d6d..8da0667a23 100644
--- a/feature/utilcode/pkg/src/main/AndroidManifest.xml
+++ b/feature/utilcode/pkg/src/main/AndroidManifest.xml
@@ -1,6 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:value="D1234567890123456789012345678901234567890" />
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt
index 0b8565bc7f..51bb0b7e66 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt
@@ -1,7 +1,6 @@
package com.blankj.utilcode.pkg
-import android.os.Environment
-import com.blankj.utilcode.util.Utils
+import com.blankj.utilcode.util.PathUtils
/**
* ```
@@ -12,20 +11,9 @@ import com.blankj.utilcode.util.Utils
* ```
*/
object Config {
-
val FILE_SEP = System.getProperty("file.separator")
val LINE_SEP = System.getProperty("line.separator")
const val TEST_PKG = "com.blankj.testinstall"
- val CACHE_PATH: String
- val TEST_APK_PATH: String
-
- init {
- val cacheDir = Utils.getApp().externalCacheDir
- CACHE_PATH = if (cacheDir != null) {
- cacheDir.absolutePath
- } else {
- Environment.getExternalStorageDirectory().absolutePath
- } + FILE_SEP
- TEST_APK_PATH = CACHE_PATH + "test_install.apk"
- }
+ val CACHE_PATH = PathUtils.getCachePathExternalFirst() + FILE_SEP
+ val TEST_APK_PATH: String = CACHE_PATH + "test_install.apk"
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java
index 5de305deb9..076858b3d1 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java
@@ -28,5 +28,4 @@ public void testCallback(Callback callback) {
callback.call();
}
}
-
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt
index 1565865028..2640191959 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt
@@ -3,8 +3,10 @@ package com.blankj.utilcode.pkg.feature
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import android.widget.TextView
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.pkg.feature.activity.ActivityActivity
import com.blankj.utilcode.pkg.feature.adaptScreen.AdaptScreenActivity
@@ -15,16 +17,21 @@ import com.blankj.utilcode.pkg.feature.brightness.BrightnessActivity
import com.blankj.utilcode.pkg.feature.bus.BusActivity
import com.blankj.utilcode.pkg.feature.clean.CleanActivity
import com.blankj.utilcode.pkg.feature.click.ClickActivity
+import com.blankj.utilcode.pkg.feature.clipboard.ClipboardActivity
import com.blankj.utilcode.pkg.feature.device.DeviceActivity
+import com.blankj.utilcode.pkg.feature.file.FileActivity
import com.blankj.utilcode.pkg.feature.flashlight.FlashlightActivity
import com.blankj.utilcode.pkg.feature.fragment.FragmentActivity
import com.blankj.utilcode.pkg.feature.image.ImageActivity
+import com.blankj.utilcode.pkg.feature.intent.IntentActivity
import com.blankj.utilcode.pkg.feature.keyboard.KeyboardActivity
import com.blankj.utilcode.pkg.feature.language.LanguageActivity
import com.blankj.utilcode.pkg.feature.log.LogActivity
import com.blankj.utilcode.pkg.feature.messenger.MessengerActivity
import com.blankj.utilcode.pkg.feature.metaData.MetaDataActivity
+import com.blankj.utilcode.pkg.feature.mvp.MvpActivity
import com.blankj.utilcode.pkg.feature.network.NetworkActivity
+import com.blankj.utilcode.pkg.feature.notification.NotificationActivity
import com.blankj.utilcode.pkg.feature.path.PathActivity
import com.blankj.utilcode.pkg.feature.permission.PermissionActivity
import com.blankj.utilcode.pkg.feature.phone.PhoneActivity
@@ -34,12 +41,19 @@ import com.blankj.utilcode.pkg.feature.resource.ResourceActivity
import com.blankj.utilcode.pkg.feature.rom.RomActivity
import com.blankj.utilcode.pkg.feature.screen.ScreenActivity
import com.blankj.utilcode.pkg.feature.sdcard.SDCardActivity
+import com.blankj.utilcode.pkg.feature.shadow.ShadowActivity
import com.blankj.utilcode.pkg.feature.snackbar.SnackbarActivity
import com.blankj.utilcode.pkg.feature.spStatic.SPStaticActivity
import com.blankj.utilcode.pkg.feature.span.SpanActivity
import com.blankj.utilcode.pkg.feature.toast.ToastActivity
+import com.blankj.utilcode.pkg.feature.uiMessage.UiMessageActivity
import com.blankj.utilcode.pkg.feature.vibrate.VibrateActivity
-import kotlinx.android.synthetic.main.activity_util_core.*
+import com.blankj.utilcode.pkg.feature.volume.VolumeActivity
+import com.blankj.utilcode.pkg.helper.DialogHelper
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.LogUtils
+import com.blankj.utilcode.util.ThreadUtils
+import com.blankj.utilcode.util.UtilsTransActivity
/**
* ```
@@ -49,7 +63,7 @@ import kotlinx.android.synthetic.main.activity_util_core.*
* desc :
* ```
*/
-class CoreUtilActivity : CommonTitleActivity() {
+class CoreUtilActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -58,94 +72,155 @@ class CoreUtilActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.core_util)
+ override fun bindTitleRes(): Int {
+ return R.string.core_util
}
- override fun initData(bundle: Bundle?) {}
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemClick(R.string.demo_activity, true) {
+ ActivityActivity.start(this)
+ ThreadUtils.runOnUiThreadDelayed(Runnable {
- override fun bindLayout(): Int {
- return R.layout.activity_util_core
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- coreUtilActivityBtn,
- coreUtilAdaptScreenBtn,
- coreUtilApiBtn,
- coreUtilAppBtn,
- coreUtilBarBtn,
- coreUtilBrightnessBtn,
- coreUtilBusBtn,
- coreUtilCleanBtn,
- coreUtilClickBtn,
- coreUtilCrashBtn,
- coreUtilDeviceBtn,
- coreUtilFlashlightBtn,
- coreUtilFragmentBtn,
- coreUtilImageBtn,
- coreUtilKeyboardBtn,
- coreUtilLanguageBtn,
- coreUtilLogBtn,
- coreUtilMessengerBtn,
- coreUtilMetaDataBtn,
- coreUtilNetworkBtn,
- coreUtilPathBtn,
- coreUtilPermissionBtn,
- coreUtilPhoneBtn,
- coreUtilProcessBtn,
- coreUtilReflectBtn,
- coreUtilResourceBtn,
- coreUtilRomBtn,
- coreUtilScreenBtn,
- coreUtilSdcardBtn,
- coreUtilSnackbarBtn,
- coreUtilSpStaticBtn,
- coreUtilSpanBtn,
- coreUtilToastBtn,
- coreUtilVibrateBtn
+ }, 2000)
+ },
+ CommonItemClick(R.string.demo_adapt_screen, true) {
+ AdaptScreenActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_api, true) {
+ ApiActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_app, true) {
+ AppActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_bar, true) {
+ BarActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_brightness, true) {
+ BrightnessActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_bus, true) {
+ BusActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_clean, true) {
+ CleanActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_click, true) {
+ ClickActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_clipboard, true) {
+ ClipboardActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_crash) {
+ throw NullPointerException("crash test")
+ },
+ CommonItemClick(R.string.demo_device, true) {
+ DeviceActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_file, true) {
+ FileActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_flashlight, true) {
+ FlashlightActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_fragment, true) {
+ FragmentActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_image, true) {
+ ImageActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_intent, true) {
+ IntentActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_keyboard, true) {
+ KeyboardActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_language, true) {
+ LanguageActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_log, true) {
+ LogActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_messenger, true) {
+ MessengerActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_meta_data, true) {
+ MetaDataActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_mvp, true) {
+ MvpActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_network, true) {
+ NetworkActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_notification, true) {
+ NotificationActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_path, true) {
+ PathActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_permission, true) {
+ PermissionActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_phone, true) {
+ PhoneActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_process, true) {
+ ProcessActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_reflect, true) {
+ ReflectActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_resource, true) {
+ ResourceActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_rom, true) {
+ RomActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_screen, true) {
+ ScreenActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_sdcard, true) {
+ SDCardActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_shadow, true) {
+ ShadowActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_snackbar, true) {
+ SnackbarActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_spStatic, true) {
+ SPStaticActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_span, true) {
+ SpanActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_toast, true) {
+ ToastActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_trans_activity, true) {
+ UtilsTransActivity.start(this, object : UtilsTransActivity.TransActivityDelegate() {
+ override fun onCreated(activity: UtilsTransActivity, savedInstanceState: Bundle?) {
+ super.onCreated(activity, savedInstanceState)
+ activity.setContentView(R.layout.common_dialog_loading)
+ activity.findViewById(R.id.utilActionLoadingMsgTv).text = "Trans Activity is showing..."
+ }
+ })
+ },
+ CommonItemClick(R.string.demo_uiMessage, true) {
+ UiMessageActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_vibrate, true) {
+ VibrateActivity.start(this)
+ },
+ CommonItemClick(R.string.demo_volume, true) {
+ VolumeActivity.start(this)
+ }
)
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.coreUtilActivityBtn -> ActivityActivity.start(this)
- R.id.coreUtilAdaptScreenBtn -> AdaptScreenActivity.start(this)
- R.id.coreUtilApiBtn -> ApiActivity.start(this)
- R.id.coreUtilAppBtn -> AppActivity.start(this)
- R.id.coreUtilBarBtn -> BarActivity.start(this)
- R.id.coreUtilBrightnessBtn -> BrightnessActivity.start(this)
- R.id.coreUtilBusBtn -> BusActivity.start(this)
- R.id.coreUtilCleanBtn -> CleanActivity.start(this)
- R.id.coreUtilClickBtn -> ClickActivity.start(this)
- R.id.coreUtilCrashBtn -> throw NullPointerException("crash test")
- R.id.coreUtilDeviceBtn -> DeviceActivity.start(this)
- R.id.coreUtilFlashlightBtn -> FlashlightActivity.start(this)
- R.id.coreUtilFragmentBtn -> FragmentActivity.start(this)
- R.id.coreUtilImageBtn -> ImageActivity.start(this)
- R.id.coreUtilKeyboardBtn -> KeyboardActivity.start(this)
- R.id.coreUtilLanguageBtn -> LanguageActivity.start(this)
- R.id.coreUtilLogBtn -> LogActivity.start(this)
- R.id.coreUtilMessengerBtn -> MessengerActivity.start(this)
- R.id.coreUtilMetaDataBtn -> MetaDataActivity.start(this)
- R.id.coreUtilNetworkBtn -> NetworkActivity.start(this)
- R.id.coreUtilNetworkBtn -> NetworkActivity.start(this)
- R.id.coreUtilPathBtn -> PathActivity.start(this)
- R.id.coreUtilPermissionBtn -> PermissionActivity.start(this)
- R.id.coreUtilPhoneBtn -> PhoneActivity.start(this)
- R.id.coreUtilProcessBtn -> ProcessActivity.start(this)
- R.id.coreUtilReflectBtn -> ReflectActivity.start(this)
- R.id.coreUtilResourceBtn -> ResourceActivity.start(this)
- R.id.coreUtilRomBtn -> RomActivity.start(this)
- R.id.coreUtilScreenBtn -> ScreenActivity.start(this)
- R.id.coreUtilSdcardBtn -> SDCardActivity.start(this)
- R.id.coreUtilSnackbarBtn -> SnackbarActivity.start(this)
- R.id.coreUtilSpStaticBtn -> SPStaticActivity.start(this)
- R.id.coreUtilSpanBtn -> SpanActivity.start(this)
- R.id.coreUtilToastBtn -> ToastActivity.start(this)
- R.id.coreUtilVibrateBtn -> VibrateActivity.start(this)
- }
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ LogUtils.e(requestCode, requestCode)
}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
index 50d3921255..97023b94c2 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
@@ -2,20 +2,22 @@ package com.blankj.utilcode.pkg.feature.activity
import android.content.Context
import android.content.Intent
-import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
-import android.os.Build
import android.os.Bundle
-import android.support.v4.app.ActivityOptionsCompat
-import android.view.View
-import android.view.Window
-import com.blankj.common.CommonTitleActivity
+import android.widget.ImageView
+import androidx.core.app.ActivityOptionsCompat
+import com.blankj.base.rv.ItemViewHolder
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemImage
+import com.blankj.common.item.CommonItemTitle
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.pkg.feature.CoreUtilActivity
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.AppUtils
-import com.blankj.utilcode.util.SpanUtils
-import kotlinx.android.synthetic.main.activity_activity.*
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.StringUtils
import java.util.*
/**
@@ -26,7 +28,7 @@ import java.util.*
* desc : demo about ActivityUtils
* ```
*/
-class ActivityActivity : CommonTitleActivity() {
+class ActivityActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -35,163 +37,158 @@ class ActivityActivity : CommonTitleActivity() {
}
}
- private var random = Random()
- private lateinit var bitmap: Bitmap
- internal lateinit var intent: Intent
- private val intents = arrayOfNulls(2)
-
- override fun bindTitle(): String {
- return getString(R.string.demo_activity)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- window.requestFeature(Window.FEATURE_CONTENT_TRANSITIONS)
- }
- return R.layout.activity_activity
+ override fun bindTitleRes(): Int {
+ return R.string.demo_activity
}
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- activityClzBtn,
- activityClzOptBtn,
- activityClzAnimBtn,
- activityActClzBtn,
- activityActClzOptBtn,
- activityActClzSharedElementBtn,
- activityActClzAnimBtn,
- activityPkgClsBtn,
- activityPkgClsOptBtn,
- activityPkgClsAnimBtn,
- activityActPkgClsBtn,
- activityActPkgClsOptBtn,
- activityActPkgClsSharedElementBtn,
- activityActPkgClsAnimBtn,
- activityIntentBtn,
- activityIntentOptBtn,
- activityIntentSharedElementBtn,
- activityIntentAnimBtn,
- activityIntentsBtn,
- activityIntentsOptBtn,
- activityIntentsAnimBtn,
- activityActIntentsBtn,
- activityActIntentsOptBtn,
- activityActIntentsAnimBtn,
- activityActClzSharedElementBtn,
- activityStartHomeActivityBtn,
- activityFinishActivityBtn,
- activityFinishToActivityBtn,
- activityFinishAllActivitiesBtn
- )
- SpanUtils.with(activityAboutTv)
- .appendLine("isActivityExists: " + ActivityUtils.isActivityExists(AppUtils.getAppPackageName(), SubActivityActivity::class.java.name))
- .appendLine("getLauncherActivity: " + ActivityUtils.getLauncherActivity(AppUtils.getAppPackageName()))
- .appendLine("getTopActivity: " + ActivityUtils.getTopActivity())
- .appendLine("isActivityExistsInStack: " + ActivityUtils.isActivityExistsInStack(CoreUtilActivity::class.java))
- .append("getActivityIcon: ")
- .appendImage(ActivityUtils.getActivityIcon(this), SpanUtils.ALIGN_CENTER)
- .appendLine()
- .append("getActivityLogo: ")
- .appendImage(ActivityUtils.getActivityLogo(this), SpanUtils.ALIGN_CENTER)
- .create()
- bitmap = (activityViewSharedElement.drawable as BitmapDrawable).bitmap
-
- intent = Intent(this, SubActivityActivity::class.java)
+ override fun bindItems(): List> {
+ val elementItem = ActivityItem()
+ val intent = Intent(this, SubActivityActivity::class.java)
+ val intents = arrayOfNulls(2)
intents[0] = intent
intents[1] = Intent(this, SubActivityActivity::class.java)
- }
- override fun doBusiness() {}
+ return CollectionUtils.newArrayList(
+ elementItem,
+ CommonItemTitle("isActivityExists(${SubActivityActivity::class.java.name})", ActivityUtils.isActivityExists(AppUtils.getAppPackageName(), SubActivityActivity::class.java.name).toString()),
+ CommonItemTitle("getLauncherActivity", ActivityUtils.getLauncherActivity(AppUtils.getAppPackageName())),
+ CommonItemTitle("getMainActivities", ActivityUtils.getMainActivities().toString()),
+ CommonItemTitle("getActivityList", CollectionUtils.collect(ActivityUtils.getActivityList()) { input -> input.javaClass.simpleName }.toString()),
+ CommonItemTitle("getTopActivity", ActivityUtils.getTopActivity().toString()),
+ CommonItemTitle("isActivityExistsInStack", ActivityUtils.isActivityExistsInStack(CoreUtilActivity::class.java).toString()),
+ CommonItemImage("getActivityIcon") {
+ it.setImageDrawable(ActivityUtils.getActivityIcon(ActivityActivity::class.java))
+ },
+ CommonItemImage("getActivityLogo") {
+ it.setImageDrawable(ActivityUtils.getActivityLogo(ActivityActivity::class.java))
+ },
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.activityClzBtn -> ActivityUtils.startActivity(SubActivityActivity::class.java)
- R.id.activityClzOptBtn -> ActivityUtils.startActivity(SubActivityActivity::class.java,
- getOption(random.nextInt(5)))
- R.id.activityClzAnimBtn -> ActivityUtils.startActivity(SubActivityActivity::class.java,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityActClzBtn -> ActivityUtils.startActivity(this,
- SubActivityActivity::class.java)
- R.id.activityActClzOptBtn -> ActivityUtils.startActivity(this,
- SubActivityActivity::class.java,
- getOption(random.nextInt(5)))
- R.id.activityActClzSharedElementBtn -> ActivityUtils.startActivity(this,
- SubActivityActivity::class.java,
- activityViewSharedElement)
- R.id.activityActClzAnimBtn -> ActivityUtils.startActivity(this,
- SubActivityActivity::class.java,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityPkgClsBtn -> ActivityUtils.startActivity(this.packageName,
- SubActivityActivity::class.java.name)
- R.id.activityPkgClsOptBtn -> ActivityUtils.startActivity(this.packageName,
- SubActivityActivity::class.java.name,
- getOption(random.nextInt(5)))
- R.id.activityPkgClsAnimBtn -> ActivityUtils.startActivity(this.packageName,
- SubActivityActivity::class.java.name,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityActPkgClsBtn -> ActivityUtils.startActivity(this,
- this.packageName,
- SubActivityActivity::class.java.name)
- R.id.activityActPkgClsOptBtn -> ActivityUtils.startActivity(this,
- this.packageName,
- SubActivityActivity::class.java.name,
- getOption(random.nextInt(5)))
- R.id.activityActPkgClsSharedElementBtn -> ActivityUtils.startActivity(this,
- this.packageName,
- SubActivityActivity::class.java.name,
- activityViewSharedElement)
- R.id.activityActPkgClsAnimBtn -> ActivityUtils.startActivity(this,
- this.packageName,
- SubActivityActivity::class.java.name,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityIntentBtn -> ActivityUtils.startActivity(this, intent)
- R.id.activityIntentOptBtn -> ActivityUtils.startActivity(this, intent, getOption(random.nextInt(5)))
- R.id.activityIntentSharedElementBtn -> ActivityUtils.startActivity(this, intent, activityViewSharedElement)
- R.id.activityIntentAnimBtn -> ActivityUtils.startActivity(this, intent,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityIntentsBtn -> ActivityUtils.startActivities(intents)
- R.id.activityIntentsOptBtn -> ActivityUtils.startActivities(intents, getOption(random.nextInt(5)))
- R.id.activityIntentsAnimBtn -> ActivityUtils.startActivities(intents,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityActIntentsBtn -> ActivityUtils.startActivities(this, intents,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityActIntentsOptBtn -> ActivityUtils.startActivities(this, intents, getOption(random.nextInt(5)))
- R.id.activityActIntentsAnimBtn -> ActivityUtils.startActivities(this, intents,
- R.anim.fade_in_1000, R.anim.fade_out_1000)
- R.id.activityStartHomeActivityBtn -> ActivityUtils.startHomeActivity()
- R.id.activityFinishActivityBtn -> ActivityUtils.finishActivity(CoreUtilActivity::class.java)
- R.id.activityFinishToActivityBtn -> ActivityUtils.finishToActivity(CoreUtilActivity::class.java, false, true)
- R.id.activityFinishAllActivitiesBtn -> ActivityUtils.finishAllActivities()
- }
+ CommonItemClick(R.string.activity_clz, true) {
+ ActivityUtils.startActivity(SubActivityActivity::class.java)
+ },
+ CommonItemClick(R.string.activity_clz_opt, true) {
+ ActivityUtils.startActivity(SubActivityActivity::class.java, getOption(elementItem))
+ },
+ CommonItemClick(R.string.activity_clz_anim, true) {
+ ActivityUtils.startActivity(SubActivityActivity::class.java, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_act_clz, true) {
+ ActivityUtils.startActivity(this, SubActivityActivity::class.java)
+ },
+ CommonItemClick(R.string.activity_act_clz_shared_element, true) {
+ ActivityUtils.startActivity(this, SubActivityActivity::class.java, elementItem.element)
+ },
+ CommonItemClick(R.string.activity_act_clz_anim, true) {
+ ActivityUtils.startActivity(this, SubActivityActivity::class.java, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_pkg_cls, true) {
+ ActivityUtils.startActivity(this.packageName, SubActivityActivity::class.java.name)
+ },
+ CommonItemClick(R.string.activity_pkg_cls_opt, true) {
+ ActivityUtils.startActivity(this.packageName, SubActivityActivity::class.java.name, getOption(elementItem))
+ },
+ CommonItemClick(R.string.activity_pkg_cls_anim, true) {
+ ActivityUtils.startActivity(this.packageName, SubActivityActivity::class.java.name, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_act_pkg_cls, true) {
+ ActivityUtils.startActivity(this, this.packageName, SubActivityActivity::class.java.name)
+ },
+ CommonItemClick(R.string.activity_act_pkg_cls_opt, true) {
+ ActivityUtils.startActivity(this, this.packageName, SubActivityActivity::class.java.name, getOption(elementItem))
+ },
+ CommonItemClick(R.string.activity_act_pkg_cls_shared_element, true) {
+ ActivityUtils.startActivity(this, this.packageName, SubActivityActivity::class.java.name, elementItem.element)
+ },
+ CommonItemClick(R.string.activity_act_pkg_cls_anim, true) {
+ ActivityUtils.startActivity(this, this.packageName, SubActivityActivity::class.java.name, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_intent, true) {
+ ActivityUtils.startActivity(this, intent)
+ },
+ CommonItemClick(R.string.activity_intent_opt, true) {
+ ActivityUtils.startActivity(this, intent, getOption(elementItem))
+ },
+ CommonItemClick(R.string.activity_intent_shared_element, true) {
+ ActivityUtils.startActivity(this, intent, elementItem.element)
+ },
+ CommonItemClick(R.string.activity_intent_anim, true) {
+ ActivityUtils.startActivity(this, intent, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_intents, true) {
+ ActivityUtils.startActivities(intents)
+ },
+ CommonItemClick(R.string.activity_intents_opt, true) {
+ ActivityUtils.startActivities(intents, getOption(elementItem))
+ },
+ CommonItemClick(R.string.activity_intents_anim, true) {
+ ActivityUtils.startActivities(intents, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_act_intents, true) {
+ ActivityUtils.startActivities(this, intents, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_act_intents_opt, true) {
+ ActivityUtils.startActivities(this, intents, getOption(elementItem))
+ },
+ CommonItemClick(R.string.activity_act_intents_anim, true) {
+ ActivityUtils.startActivities(this, intents, R.anim.fade_in_1000, R.anim.fade_out_1000)
+ },
+ CommonItemClick(R.string.activity_start_home_activity, true) {
+ ActivityUtils.startHomeActivity()
+ },
+ CommonItemClick(R.string.activity_start_launcher_activity, true) {
+ ActivityUtils.startLauncherActivity()
+ },
+ CommonItemClick(R.string.activity_finish_activity, false) {
+ ActivityUtils.finishActivity(CoreUtilActivity::class.java)
+ },
+ CommonItemClick(R.string.activity_finish_to_activity, true) {
+ ActivityUtils.finishToActivity(CoreUtilActivity::class.java, false, true)
+ },
+ CommonItemClick(R.string.activity_finish_all_activities_except_newest, true) {
+ ActivityUtils.finishAllActivitiesExceptNewest()
+ },
+ CommonItemClick(R.string.activity_finish_all_activities, true) {
+ ActivityUtils.finishAllActivities()
+ }
+ )
}
- private fun getOption(type: Int): Bundle? {
- when (type) {
+ private fun getOption(activityItem: ActivityItem): Bundle? {
+ when (Random().nextInt(5)) {
0 -> return ActivityOptionsCompat.makeCustomAnimation(this,
- R.anim.slide_in_right_1000,
- R.anim.slide_out_left_1000)
+ R.anim.slide_right_in_1000,
+ R.anim.slide_left_out_1000)
.toBundle()
- 1 -> return ActivityOptionsCompat.makeScaleUpAnimation(activityViewSharedElement,
- activityViewSharedElement.width / 2,
- activityViewSharedElement.height / 2,
+ 1 -> return ActivityOptionsCompat.makeScaleUpAnimation(activityItem.element,
+ activityItem.element.width / 2,
+ activityItem.element.height / 2,
0, 0)
.toBundle()
- 2 -> return ActivityOptionsCompat.makeThumbnailScaleUpAnimation(activityViewSharedElement,
- bitmap,
+ 2 -> return ActivityOptionsCompat.makeThumbnailScaleUpAnimation(activityItem.element,
+ (activityItem.element.drawable as BitmapDrawable).bitmap,
0, 0)
.toBundle()
3 -> return ActivityOptionsCompat.makeSceneTransitionAnimation(this,
- activityViewSharedElement,
- getString(R.string.activity_shared_element))
+ activityItem.element,
+ StringUtils.getString(R.string.activity_shared_element))
.toBundle()
- 4 -> return ActivityOptionsCompat.makeClipRevealAnimation(activityViewSharedElement,
- activityViewSharedElement.width / 2,
- activityViewSharedElement.height / 2,
+ else -> return ActivityOptionsCompat.makeClipRevealAnimation(activityItem.element,
+ activityItem.element.width / 2,
+ activityItem.element.height / 2,
0, 0)
.toBundle()
- else -> return null
}
}
}
+
+class ActivityItem : CommonItem {
+
+ lateinit var element: ImageView;
+
+ constructor() : super(R.layout.activity_item_shared_element_activity)
+
+ override fun bind(holder: ItemViewHolder, position: Int) {
+ super.bind(holder, position)
+ element = holder.findViewById(R.id.activityViewSharedElement)
+ }
+}
\ No newline at end of file
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
index 0d2bc4bf45..3505709cd2 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
@@ -1,13 +1,15 @@
package com.blankj.utilcode.pkg.feature.activity
-import android.os.Build
+import android.app.Activity
+import android.content.Intent
import android.os.Bundle
-import android.support.v4.app.ActivityCompat
+import androidx.core.app.ActivityCompat
import android.view.View
-import android.view.Window
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.ColorUtils
+import kotlinx.android.synthetic.main.activity_sub_activity.*
+
/**
* ```
@@ -17,29 +19,27 @@ import com.blankj.utilcode.util.ColorUtils
* desc : demo about ActivityUtils
* ```
*/
-class SubActivityActivity : CommonTitleActivity() {
-
- override fun initData(bundle: Bundle?) {}
+class SubActivityActivity : CommonActivity() {
override fun bindLayout(): Int {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- window.requestFeature(Window.FEATURE_CONTENT_TRANSITIONS)
- }
- return R.layout.activity_activity_sub
+ return R.layout.activity_sub_activity
}
- override fun bindTitle(): String {
- return getString(R.string.demo_activity)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_activity
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
contentView?.setBackgroundColor(ColorUtils.getRandomColor(false))
+ activityViewSharedElement.setOnClickListener {
+ val result = Intent()
+ result.putExtra("data", "data")
+ this@SubActivityActivity.setResult(Activity.RESULT_OK, result)
+ this@SubActivityActivity.finish()
+ }
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
-
override fun onBackPressed() {
super.onBackPressed()
ActivityCompat.finishAfterTransition(this)
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt
index 92cd379afe..007724289c 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt
@@ -6,11 +6,11 @@ import android.content.res.Resources
import android.os.Bundle
import android.view.View
import android.view.WindowManager
-import com.blankj.common.CommonBackActivity
+import com.blankj.common.activity.CommonActivity
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.AdaptScreenUtils
-class AdaptCloseActivity : CommonBackActivity() {
+class AdaptCloseActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -19,24 +19,15 @@ class AdaptCloseActivity : CommonBackActivity() {
}
}
- override fun isSwipeBack(): Boolean {
- return true
- }
-
- override fun initData(bundle: Bundle?) {}
-
override fun bindLayout(): Int {
- return R.layout.activity_adaptscreen_close
+ return R.layout.adaptscreen_close_activity
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
-
override fun getResources(): Resources {
return AdaptScreenUtils.closeAdapt(super.getResources())
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt
index 8ce8072501..f00eedc77c 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt
@@ -3,16 +3,16 @@ package com.blankj.utilcode.pkg.feature.adaptScreen
import android.content.Context
import android.content.Intent
import android.content.res.Resources
-import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.WindowManager
-import com.blankj.common.CommonBackActivity
+import com.blankj.common.activity.CommonActivity
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.AdaptScreenUtils
-import kotlinx.android.synthetic.main.activity_adaptscreen_height.*
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.LogUtils
-class AdaptHeightActivity : CommonBackActivity() {
+class AdaptHeightActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -21,24 +21,19 @@ class AdaptHeightActivity : CommonBackActivity() {
}
}
- override fun isSwipeBack(): Boolean {
- return true
- }
-
- override fun initData(bundle: Bundle?) {}
-
override fun bindLayout(): Int {
- return R.layout.activity_adaptscreen_height
+ return R.layout.adaptscreen_height_activity
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
- adaptScreenHeightWebView.setBackgroundColor(Color.parseColor("#f0d26d"))
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
+ override fun onResume() {
+ super.onResume()
+ LogUtils.e(BarUtils.getStatusBarHeight())
+ }
override fun getResources(): Resources {
return AdaptScreenUtils.adaptHeight(super.getResources(), 1920)
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
index b457f2bac8..9219c75bb5 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
@@ -2,13 +2,13 @@ package com.blankj.utilcode.pkg.feature.adaptScreen
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.utilcode.pkg.R
-import kotlinx.android.synthetic.main.activity_adaptscreen.*
+import com.blankj.utilcode.util.CollectionUtils
-class AdaptScreenActivity : CommonTitleActivity() {
+class AdaptScreenActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -17,31 +17,21 @@ class AdaptScreenActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_adapt_screen)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_adapt_screen
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_adaptscreen;
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- adaptScreenAdaptWidthBtn,
- adaptScreenAdaptHeightBtn,
- adaptScreenCloseAdaptBtn
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList(
+ CommonItemClick(R.string.adaptScreen_adapt_width, true) {
+ AdaptWidthActivity.start(this)
+ },
+ CommonItemClick(R.string.adaptScreen_adapt_height, true) {
+ AdaptHeightActivity.start(this)
+ },
+ CommonItemClick(R.string.adaptScreen_adapt_close, true) {
+ AdaptCloseActivity.start(this)
+ }
)
}
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.adaptScreenAdaptWidthBtn -> AdaptWidthActivity.start(this)
- R.id.adaptScreenAdaptHeightBtn -> AdaptHeightActivity.start(this)
- R.id.adaptScreenCloseAdaptBtn -> AdaptCloseActivity.start(this)
- }
- }
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt
index d66ccd3019..6ccd3f45a0 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt
@@ -7,12 +7,12 @@ import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.WindowManager
-import com.blankj.common.CommonBackActivity
+import com.blankj.common.activity.CommonActivity
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.AdaptScreenUtils
-import kotlinx.android.synthetic.main.activity_adaptscreen_width.*
+import kotlinx.android.synthetic.main.adaptscreen_width_activity.*
-class AdaptWidthActivity : CommonBackActivity() {
+class AdaptWidthActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -21,25 +21,16 @@ class AdaptWidthActivity : CommonBackActivity() {
}
}
- override fun isSwipeBack(): Boolean {
- return true
- }
-
- override fun initData(bundle: Bundle?) {}
-
override fun bindLayout(): Int {
- return R.layout.activity_adaptscreen_width
+ return R.layout.adaptscreen_width_activity
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
adaptScreenWidthWebView.setBackgroundColor(Color.parseColor("#f0d26d"))
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
-
override fun getResources(): Resources {
return AdaptScreenUtils.adaptWidth(super.getResources(), 1080)
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt
index ea2f70bf3c..8e11495b09 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt
@@ -2,14 +2,14 @@ package com.blankj.utilcode.pkg.feature.api
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.pkg.feature.api.other.export.OtherModuleApi
import com.blankj.utilcode.util.ApiUtils
+import com.blankj.utilcode.util.CollectionUtils
import com.blankj.utilcode.util.ToastUtils
-import kotlinx.android.synthetic.main.activity_api.*
/**
* ```
@@ -19,9 +19,7 @@ import kotlinx.android.synthetic.main.activity_api.*
* desc : demo about ApiUtils
* ```
*/
-class ApiActivity : CommonTitleActivity() {
-
- private val api = ApiUtils.getApi(OtherModuleApi::class.java)
+class ApiActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -30,33 +28,18 @@ class ApiActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_api)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_api
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- apiInvokeWithParams,
- apiInvokeWithReturnValue
- )
+ override fun bindTitleRes(): Int {
+ return R.string.demo_api
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.apiInvokeWithParams -> {
- api.invokeWithParams(OtherModuleApi.ApiBean("params"))
- }
- R.id.apiInvokeWithReturnValue -> {
- ToastUtils.showShort(api.invokeWithReturnValue().name)
- }
- }
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemClick(R.string.api_invoke_with_params) {
+ ApiUtils.getApi(OtherModuleApi::class.java)?.invokeWithParams(OtherModuleApi.ApiBean("params"))
+ },
+ CommonItemClick(R.string.api_invoke_with_return_value) {
+ ToastUtils.showShort(ApiUtils.getApi(OtherModuleApi::class.java)?.invokeWithReturnValue()?.name)
+ }
+ );
}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt
index 6a5c0e3f61..21eb351146 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt
@@ -1,15 +1,15 @@
package com.blankj.utilcode.pkg.feature.app
+import android.app.Activity
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.helper.PermissionHelper
+import com.blankj.common.item.*
+import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.pkg.Config
import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.pkg.helper.PermissionHelper
import com.blankj.utilcode.util.*
-import kotlinx.android.synthetic.main.activity_app.*
/**
* ```
@@ -19,20 +19,21 @@ import kotlinx.android.synthetic.main.activity_app.*
* desc : demo about AppUtils
* ```
*/
-class AppActivity : CommonTitleActivity() {
+class AppActivity : CommonActivity(), Utils.OnAppStatusChangedListener {
+
+ var isRegisterAppStatusChangedListener: Boolean = false
companion object {
fun start(context: Context) {
- PermissionHelper.requestStorage(object : PermissionHelper.OnPermissionGrantedListener {
- override fun onPermissionGranted() {
+ PermissionHelper.request(context, object : PermissionUtils.SimpleCallback {
+ override fun onGranted() {
val starter = Intent(context, AppActivity::class.java)
context.startActivity(starter)
}
- }, object : PermissionHelper.OnPermissionDeniedListener {
- override fun onPermissionDenied() {
- start(context)
+
+ override fun onDenied() {
}
- })
+ }, PermissionConstants.STORAGE)
}
}
@@ -42,51 +43,56 @@ class AppActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_app)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_app
+ override fun bindTitleRes(): Int {
+ return R.string.demo_app
}
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- appInstallAppBtn,
- appUninstallAppBtn,
- appLaunchAppBtn,
- appRelaunchAppBtn,
- appExitAppBtn,
- appLaunchAppDetailsSettingsBtn
- )
- SpanUtils.with(appAboutTv)
- .appendLine("isAppRoot: " + AppUtils.isAppRoot())
- .appendLine("isAppDebug: " + AppUtils.isAppDebug())
- .appendLine("isAppSystem: " + AppUtils.isAppSystem())
- .appendLine("isAppForeground: " + AppUtils.isAppForeground("com.blankj.androidutilcode"))
- .appendLine("isAppRunning: " + AppUtils.isAppRunning("com.blankj.androidutilcode"))
- .append("getAppIcon: ").appendImage(AppUtils.getAppIcon(), SpanUtils.ALIGN_CENTER)
- .appendLine()
- .appendLine("getAppPackageName: " + AppUtils.getAppPackageName())
- .appendLine("getAppName: " + AppUtils.getAppName())
- .appendLine("getAppPath: " + AppUtils.getAppPath())
- .appendLine("getAppVersionName: " + AppUtils.getAppVersionName())
- .appendLine("getAppVersionCode: " + AppUtils.getAppVersionCode())
- .appendLine("getAppSignatureSHA1: " + AppUtils.getAppSignatureSHA1())
- .appendLine("getAppSignatureSHA256: " + AppUtils.getAppSignatureSHA256())
- .appendLine("getAppSignatureMD5: " + AppUtils.getAppSignatureMD5())
- .appendLine("getAppUid: " + AppUtils.getAppUid())
- .append("getApkInfo: " + AppUtils.getApkInfo(AppUtils.getAppPath()))
- .create()
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ LogUtils.e(requestCode, resultCode)
}
- override fun doBusiness() {}
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemSwitch(
+ "registerAppStatusChangedListener",
+ { isRegisterAppStatusChangedListener },
+ {
+ isRegisterAppStatusChangedListener = it
+ if (it) {
+ AppUtils.registerAppStatusChangedListener(this)
+ } else {
+ AppUtils.unregisterAppStatusChangedListener(this)
+ }
+ }),
+ CommonItemTitle("isAppRoot", AppUtils.isAppRoot().toString()),
+ CommonItemTitle("isAppDebug", AppUtils.isAppDebug().toString()),
+ CommonItemTitle("isAppSystem", AppUtils.isAppSystem().toString()),
+ CommonItemTitle(
+ "isAppForeground",
+ AppUtils.isAppForeground(AppUtils.getAppPackageName()).toString()
+ ),
+ CommonItemTitle(
+ "isAppRunning",
+ AppUtils.isAppRunning(AppUtils.getAppPackageName()).toString()
+ ),
+ CommonItemImage("getAppIcon") {
+ it.setImageDrawable(AppUtils.getAppIcon())
+ },
+ CommonItemTitle("getAppPackageName", AppUtils.getAppPackageName()),
+ CommonItemTitle("getAppName", AppUtils.getAppName()),
+ CommonItemTitle("getAppPath", AppUtils.getAppPath()),
+ CommonItemTitle("getAppVersionName", AppUtils.getAppVersionName()),
+ CommonItemTitle("getAppVersionCode", AppUtils.getAppVersionCode().toString()),
+ CommonItemTitle("getAppMinSdkVersion", AppUtils.getAppMinSdkVersion().toString()),
+ CommonItemTitle("getAppTargetSdkVersion", AppUtils.getAppTargetSdkVersion().toString()),
+ CommonItemTitle("getAppSignaturesSHA1", AppUtils.getAppSignaturesSHA1().toString()),
+ CommonItemTitle("getAppSignaturesSHA256", AppUtils.getAppSignaturesSHA256().toString()),
+ CommonItemTitle("getAppSignaturesMD5", AppUtils.getAppSignaturesMD5().toString()),
+ CommonItemTitle("getAppUid", AppUtils.getAppUid().toString()),
+ CommonItemTitle("getApkInfo", AppUtils.getApkInfo(AppUtils.getAppPath()).toString()),
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.appInstallAppBtn -> {
+ CommonItemClick(R.string.app_install) {
if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
ToastUtils.showShort(R.string.app_install_tips)
} else {
@@ -96,23 +102,47 @@ class AppActivity : CommonTitleActivity() {
listener.onReleased()
}
}
- }
- R.id.appUninstallAppBtn -> {
+ },
+ CommonItemClick(R.string.app_uninstall) {
if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
AppUtils.uninstallApp(Config.TEST_PKG)
} else {
ToastUtils.showShort(R.string.app_uninstall_tips)
}
+ },
+ CommonItemClick(R.string.app_launch) {
+ AppUtils.launchApp(this.packageName)
+ },
+ CommonItemClick(R.string.app_relaunch) {
+ AppUtils.relaunchApp()
+ },
+ CommonItemClick(R.string.app_launch_details_settings, true) {
+ AppUtils.launchAppDetailsSettings()
+ },
+ CommonItemClick(R.string.app_exit) {
+ AppUtils.exitApp()
}
- R.id.appLaunchAppBtn -> AppUtils.launchApp(this.packageName)
- R.id.appRelaunchAppBtn -> AppUtils.relaunchApp()
- R.id.appLaunchAppDetailsSettingsBtn -> AppUtils.launchAppDetailsSettings()
- R.id.appExitAppBtn -> AppUtils.exitApp()
+ )
+ }
+
+ override fun onForeground(activity: Activity) {
+ ToastUtils.showShort("onForeground\n${activity.javaClass.simpleName}")
+ }
+
+ override fun onBackground(activity: Activity) {
+ ToastUtils.showShort("onBackground\n${activity.javaClass.simpleName}")
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ if (isRegisterAppStatusChangedListener) {
+ AppUtils.unregisterAppStatusChangedListener(this)
}
}
}
-class ReleaseInstallApkTask(private val mListener: OnReleasedListener) : ThreadUtils.SimpleTask() {
+class ReleaseInstallApkTask(private val mListener: OnReleasedListener) :
+ ThreadUtils.SimpleTask() {
override fun doInBackground() {
ResourceUtils.copyFileFromAssets("test_install", Config.TEST_APK_PATH)
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt
index dde4d29fd5..26801106a0 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt
@@ -2,11 +2,16 @@ package com.blankj.utilcode.pkg.feature.bar
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemTitle
import com.blankj.utilcode.pkg.R
-import kotlinx.android.synthetic.main.activity_bar.*
+import com.blankj.utilcode.pkg.feature.bar.nav.BarNavActivity
+import com.blankj.utilcode.pkg.feature.bar.notification.BarNotificationActivity
+import com.blankj.utilcode.pkg.feature.bar.status.*
+import com.blankj.utilcode.pkg.feature.bar.status.fragment.BarStatusFragmentActivity
+import com.blankj.utilcode.util.CollectionUtils
/**
* ```
@@ -16,7 +21,7 @@ import kotlinx.android.synthetic.main.activity_bar.*
* desc : demo about BarUtils
* ```
*/
-class BarActivity : CommonTitleActivity() {
+class BarActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -25,43 +30,42 @@ class BarActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_bar)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_bar
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- barStatusAboutBtn,
- barStatusSetColorBtn,
- barStatusSetAlphaBtn,
- barStatusSetImageViewBtn,
- barStatusSetCustomBtn,
- barStatusSetFragmentBtn,
- barStatusSetDrawerBtn,
- barNotificationAboutBtn,
- barNavAboutBtn
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList(
+ CommonItemTitle(R.string.bar_about_status_bar, true),
+ CommonItemClick(R.string.bar_status_about, true) {
+ BarStatusActivity.start(this)
+ },
+ CommonItemClick(R.string.bar_status_set_color, true) {
+ BarStatusActivityColor.start(this)
+ },
+ CommonItemClick(R.string.bar_status_set_alpha, true) {
+ BarStatusActivityAlpha.start(this)
+ },
+ CommonItemClick(R.string.bar_status_set_image_view, true) {
+ BarStatusActivityImageView.start(this)
+ },
+ CommonItemClick(R.string.bar_status_set_custom, true) {
+ BarStatusActivityCustom.start(this)
+ },
+ CommonItemClick(R.string.bar_status_set_fragment, true) {
+ BarStatusFragmentActivity.start(this)
+ },
+ CommonItemClick(R.string.bar_status_set_drawer, true) {
+ BarStatusActivityDrawer.start(this)
+ },
+ CommonItemTitle(R.string.bar_about_notification_bar, true),
+ CommonItemClick(R.string.bar_notification_about, true) {
+ BarNotificationActivity.start(this)
+ },
+ CommonItemTitle(R.string.bar_about_nav_bar, true),
+ CommonItemClick(R.string.bar_nav_about, true) {
+ BarNavActivity.start(this)
+ }
)
}
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusAboutBtn -> BarStatusActivity.start(this)
- R.id.barStatusSetColorBtn -> BarStatusColorActivity.start(this)
- R.id.barStatusSetAlphaBtn -> BarStatusAlphaActivity.start(this)
- R.id.barStatusSetImageViewBtn -> BarStatusImageViewActivity.start(this)
- R.id.barStatusSetCustomBtn -> BarStatusCustomActivity.start(this)
- R.id.barStatusSetFragmentBtn -> BarStatusFragmentActivity.start(this)
- R.id.barStatusSetDrawerBtn -> BarStatusDrawerActivity.start(this)
- R.id.barNotificationAboutBtn -> BarNotificationActivity.start(this)
- R.id.barNavAboutBtn -> BarNavActivity.start(this)
- }
- }
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt
deleted file mode 100644
index 2528d98fca..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.content.Context
-import android.content.Intent
-import android.os.Build
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.ColorUtils
-import com.blankj.utilcode.util.SpanUtils
-import kotlinx.android.synthetic.main.activity_bar_nav.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2016/10/13
- * desc : demo about BarUtils
- * ```
- */
-class BarNavActivity : CommonTitleActivity() {
-
- companion object {
- fun start(context: Context) {
- val starter = Intent(context, BarNavActivity::class.java)
- context.startActivity(starter)
- }
- }
-
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_bar)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar_nav
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- if (!BarUtils.isSupportNavBar()) {
- barNavVisibilityCb.visibility = View.GONE
- barNavSetColorBtn.visibility = View.GONE
- } else {
- barNavVisibilityCb.setOnCheckedChangeListener { buttonView, isChecked ->
- BarUtils.setNavBarVisibility(this, isChecked)
- }
- applyDebouncingClickListener(barNavSetColorBtn)
- }
- }
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barNavSetColorBtn -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- BarUtils.setNavBarColor(this, ColorUtils.getRandomColor())
- }
- }
- updateAboutNav()
- }
-
- private fun updateAboutNav() {
- SpanUtils.with(barNavAboutTv)
- .appendLine("navHeight: " + BarUtils.getNavBarHeight())
- .apply {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- appendLine("getNavBarColor: " + ColorUtils.int2ArgbString(BarUtils.getNavBarColor(mActivity)))
- }
- }
- .append("isSupportNavBar: " + BarUtils.isSupportNavBar())
- .create();
- }
-
- override fun onWindowFocusChanged(hasFocus: Boolean) {
- super.onWindowFocusChanged(hasFocus)
- barNavVisibilityCb.isChecked = BarUtils.isNavBarVisible(this)
- updateAboutNav()
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt
deleted file mode 100644
index 52cd9c5f00..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import android.os.Handler
-import android.view.View
-import com.blankj.common.CommonTitleActivity
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import kotlinx.android.synthetic.main.activity_bar_notification.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2016/10/13
- * desc : demo about BarUtils
- * ```
- */
-class BarNotificationActivity : CommonTitleActivity() {
-
- companion object {
- fun start(context: Context) {
- val starter = Intent(context, BarNotificationActivity::class.java)
- context.startActivity(starter)
- }
- }
-
- private val mHandler = Handler()
-
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_bar)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar_notification
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(barNotificationShowBtn)
- }
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barNotificationShowBtn -> {
- BarUtils.setNotificationBarVisibility(true)
- mHandler.postDelayed({ BarUtils.setNotificationBarVisibility(false) }, 2000)
- }
- }
- }
-
- override fun onDestroy() {
- super.onDestroy()
- mHandler.removeCallbacksAndMessages(null)
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt
deleted file mode 100644
index b824590f28..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.SpanUtils
-import kotlinx.android.synthetic.main.activity_bar_status.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2016/10/13
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusActivity : CommonTitleActivity() {
-
- companion object {
- fun start(context: Context) {
- val starter = Intent(context, BarStatusActivity::class.java)
- context.startActivity(starter)
- }
- }
-
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_bar)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar_status
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- barStatusVisibilityCb.isChecked = BarUtils.isStatusBarVisible(this)
- barStatusVisibilityCb.setOnCheckedChangeListener { buttonView, isChecked ->
- BarUtils.setStatusBarVisibility(this, isChecked)
- }
-
- barStatusLightModeCb.isChecked = BarUtils.isStatusBarLightMode(this)
- barStatusLightModeCb.setOnCheckedChangeListener { buttonView, isChecked ->
- BarUtils.setStatusBarLightMode(this, isChecked)
- }
- }
-
- override fun doBusiness() {}
-
- override fun onResume() {
- super.onResume()
- updateAboutStatus()
- }
-
- override fun onDebouncingClick(view: View) {}
-
- private fun updateAboutStatus() {
- SpanUtils.with(barStatusAboutTv)
- .append("getStatusBarHeight: " + BarUtils.getStatusBarHeight())
- .create()
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt
deleted file mode 100644
index 45473e7726..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.content.Context
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.view.View
-import android.widget.SeekBar
-import com.blankj.common.CommonBackActivity
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import kotlinx.android.synthetic.main.activity_bar_status_alpha.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/05/27
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusAlphaActivity : CommonBackActivity() {
-
- companion object {
- fun start(context: Context) {
- val starter = Intent(context, BarStatusAlphaActivity::class.java)
- context.startActivity(starter)
- }
- }
-
- override fun isSwipeBack(): Boolean {
- return false
- }
-
- private var mAlpha: Int = 0
-
- private val translucentListener = object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- mAlpha = progress
- barStatusAlphaAboutTv.text = mAlpha.toString()
- updateStatusBar()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {}
- }
-
- override fun initData(bundle: Bundle?) {
- mAlpha = 112
- }
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar_status_alpha
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(barStatusAlphaSetTransparentBtn)
- barStatusAlphaChangeAlphaSb.setOnSeekBarChangeListener(translucentListener)
- barStatusAlphaAboutTv.text = mAlpha.toString()
-
- updateStatusBar()
- }
-
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusAlphaSetTransparentBtn -> barStatusAlphaChangeAlphaSb.progress = 0
- }
- }
-
- private fun updateStatusBar() {
- BarUtils.setStatusBarColor(this, Color.argb(mAlpha, 0, 0, 0))
- BarUtils.addMarginTopEqualStatusBarHeight(barStatusAlphaAboutTv)// 其实这个只需要调用一次即可
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt
deleted file mode 100644
index 99b1687a77..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.graphics.Color
-import android.os.Bundle
-import android.view.View
-import android.widget.SeekBar
-import com.blankj.base.BaseLazyFragment
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.LogUtils
-import kotlinx.android.synthetic.main.fragment_bar_status_alpha.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/07/01
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusAlphaFragment : BaseLazyFragment() {
-
- companion object {
- fun newInstance(): BarStatusAlphaFragment {
- return BarStatusAlphaFragment()
- }
- }
-
- private var mAlpha: Int = 0
-
- private val translucentListener = object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- mAlpha = progress
- barStatusAlphaFragmentAboutTv.text = mAlpha.toString()
- updateFakeStatusBar()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {}
- }
-
- override fun initData(bundle: Bundle?) {
- mAlpha = 112
- }
-
- override fun bindLayout(): Int {
- return R.layout.fragment_bar_status_alpha
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(barStatusAlphaFragmentSetTransparentBtn)
- barStatusAlphaFragmentChangeAlphaSb.setOnSeekBarChangeListener(translucentListener)
- barStatusAlphaFragmentAboutTv.text = mAlpha.toString()
-
- updateFakeStatusBar()
- }
-
- override fun doLazyBusiness() {
- LogUtils.d("doLazyBusiness() called")
- }
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusAlphaSetTransparentBtn -> barStatusAlphaFragmentChangeAlphaSb.progress = 0
- }
- }
-
- fun updateFakeStatusBar() {
- BarUtils.setStatusBarColor(barStatusAlphaFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0))
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt
deleted file mode 100644
index 02a47b0229..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonBackActivity
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.ColorUtils
-import kotlinx.android.synthetic.main.activity_bar_status_color.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/05/27
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusColorActivity : CommonBackActivity() {
-
- companion object {
- fun start(context: Context) {
- val starter = Intent(context, BarStatusColorActivity::class.java)
- context.startActivity(starter)
- }
- }
-
- override fun isSwipeBack(): Boolean {
- return true
- }
-
- private var mColor: Int = 0
-
- override fun initData(bundle: Bundle?) {
- mColor = ColorUtils.getColor(R.color.colorPrimary)
- }
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar_status_color
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(barStatusColorRandomColorBtn)
-
- updateStatusBar()
- }
-
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusColorRandomColorBtn -> {
- mColor = ColorUtils.getRandomColor()
- updateStatusBar()
- }
- }
- }
-
- private fun updateStatusBar() {
- BarUtils.setStatusBarColor(this, mColor)
- barStatusColorAboutTv.text = String.format(ColorUtils.int2ArgbString(mColor))
- BarUtils.addMarginTopEqualStatusBarHeight(barStatusColorAboutTv)// 其实这个只需要调用一次即可
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt
deleted file mode 100644
index f8b8dd8bf2..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.os.Bundle
-import android.view.View
-import com.blankj.base.BaseLazyFragment
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.ColorUtils
-import com.blankj.utilcode.util.LogUtils
-import kotlinx.android.synthetic.main.fragment_bar_status_color.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/07/01
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusColorFragment : BaseLazyFragment() {
-
- companion object {
- fun newInstance(): BarStatusColorFragment {
- return BarStatusColorFragment()
- }
- }
-
- private var mColor: Int = 0
-
- override fun initData(bundle: Bundle?) {
- mColor = ColorUtils.getColor(R.color.colorPrimary)
- }
-
- override fun bindLayout(): Int {
- return R.layout.fragment_bar_status_color
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(barStatusColorFragmentRandomColorBtn)
- updateFakeStatusBar()
- }
-
- override fun doLazyBusiness() {
- LogUtils.d("doLazyBusiness() called")
- }
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusColorFragmentRandomColorBtn -> {
- mColor = ColorUtils.getRandomColor()
- updateFakeStatusBar()
- }
- }
- }
-
- private fun updateFakeStatusBar() {
- BarUtils.setStatusBarColor(barStatusColorFragmentFakeStatusBar, mColor)
- barStatusColorFragmentAboutColorTv.text = String.format(ColorUtils.int2ArgbString(mColor))
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt
deleted file mode 100644
index 4a3d38d099..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.os.Bundle
-import android.view.View
-import com.blankj.base.BaseLazyFragment
-
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.LogUtils
-import kotlinx.android.synthetic.main.fragment_bar_status_custom.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/07/01
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusCustomFragment : BaseLazyFragment() {
-
- companion object {
- fun newInstance(): BarStatusCustomFragment {
- return BarStatusCustomFragment()
- }
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.fragment_bar_status_custom
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- BarUtils.setStatusBarCustom(barStatusCustomFragmentFakeStatusBar)
- }
-
- override fun doLazyBusiness() {
- LogUtils.d("doLazyBusiness() called")
- }
-
- override fun onDebouncingClick(view: View) {}
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt
deleted file mode 100644
index 43105e0d3b..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.content.Context
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.view.View
-import android.widget.CompoundButton
-import android.widget.SeekBar
-import com.blankj.common.CommonDrawerActivity
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.ColorUtils
-import kotlinx.android.synthetic.main.activity_bar_status_drawer.*
-
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/05/27
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusDrawerActivity : CommonDrawerActivity() {
-
- companion object {
- fun start(context: Context) {
- val starter = Intent(context, BarStatusDrawerActivity::class.java)
- context.startActivity(starter)
- }
- }
-
- private var mColor: Int = 0
- private var mAlpha: Int = 0
-
- private val mColorListener = object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- mAlpha = progress
- updateStatusBar()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {}
- }
-
- private var mAlphaCheckedChangeListener: CompoundButton.OnCheckedChangeListener = CompoundButton.OnCheckedChangeListener { _, isChecked ->
- if (isChecked) {
- barStatusDrawerChangeAlphaSb.visibility = View.VISIBLE
- barStatusDrawerRandomColorBtn.visibility = View.GONE
- barStatusDrawerSetTransparentBtn.visibility = View.VISIBLE
-
- mBaseDrawerContainerView.setBackgroundResource(R.drawable.image_lena)
- } else {
- barStatusDrawerChangeAlphaSb.visibility = View.GONE
- barStatusDrawerRandomColorBtn.visibility = View.VISIBLE
- barStatusDrawerSetTransparentBtn.visibility = View.GONE
-
- mBaseDrawerContainerView.setBackgroundColor(Color.WHITE)
- }
- updateStatusBar()
- }
-
- private var mFrontCheckedChangeListener: CompoundButton.OnCheckedChangeListener = CompoundButton.OnCheckedChangeListener { _, _ -> updateStatusBar() }
-
- override fun isSwipeBack(): Boolean {
- return false
- }
-
- override fun initData(bundle: Bundle?) {
- mColor = ColorUtils.getColor(R.color.colorPrimary)
- mAlpha = 112
- }
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar_status_drawer
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- barStatusDrawerAlphaCb.setOnCheckedChangeListener(mAlphaCheckedChangeListener)
- barStatusDrawerFrontCb.setOnCheckedChangeListener(mFrontCheckedChangeListener)
- barStatusDrawerChangeAlphaSb.setOnSeekBarChangeListener(mColorListener)
- applyDebouncingClickListener(
- barStatusDrawerRandomColorBtn,
- barStatusDrawerSetTransparentBtn
- )
-
- barStatusDrawerChangeAlphaSb.visibility = View.GONE
- barStatusDrawerSetTransparentBtn.visibility = View.GONE
-
- updateStatusBar()
- }
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusDrawerRandomColorBtn -> {
- mColor = ColorUtils.getRandomColor()
- updateStatusBar()
- }
- R.id.barStatusDrawerSetTransparentBtn -> barStatusDrawerChangeAlphaSb.progress = 0
- }
- }
-
- private fun updateStatusBar() {
- if (barStatusDrawerAlphaCb.isChecked) {
- BarUtils.setStatusBarColor4Drawer(mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, Color.argb(mAlpha, 0, 0, 0), barStatusDrawerFrontCb.isChecked)
- barStatusDrawerAboutTv.text = mAlpha.toString()
- } else {
- BarUtils.setStatusBarColor4Drawer(mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, mColor, barStatusDrawerFrontCb.isChecked)
- barStatusDrawerAboutTv.text = ColorUtils.int2ArgbString(mColor)
- }
- BarUtils.addMarginTopEqualStatusBarHeight(barStatusDrawerAlphaCb)// 其实这个只需要调用一次即可
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt
deleted file mode 100644
index 89f67e8dca..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.content.Context
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.view.View
-import android.widget.SeekBar
-import com.blankj.common.CommonBackActivity
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import kotlinx.android.synthetic.main.activity_bar_status_image_view.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/05/27
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusImageViewActivity : CommonBackActivity() {
-
- companion object {
- fun start(context: Context) {
- val starter = Intent(context, BarStatusImageViewActivity::class.java)
- context.startActivity(starter)
- }
- }
-
- private var mAlpha: Int = 0
-
- private val translucentListener = object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- mAlpha = progress
- barStatusImageViewAboutTv.text = mAlpha.toString()
- updateStatusBar()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {}
- }
-
- override fun isSwipeBack(): Boolean {
- return true
- }
-
- override fun initData(bundle: Bundle?) {
- mAlpha = 112
- }
-
- override fun bindLayout(): Int {
- return R.layout.activity_bar_status_image_view
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(barStatusImageViewSetTransparentBtn)
- barStatusImageViewChangeAlphaSb.setOnSeekBarChangeListener(translucentListener)
- barStatusImageViewAboutTv.text = mAlpha.toString()
-
- updateStatusBar()
- }
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusImageViewSetTransparentBtn -> barStatusImageViewChangeAlphaSb.progress = 0
- }
- }
-
- private fun updateStatusBar() {
- BarUtils.setStatusBarColor(this, Color.argb(mAlpha, 0, 0, 0), true)
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt
deleted file mode 100644
index 95c0f75268..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bar
-
-import android.graphics.Color
-import android.os.Bundle
-import android.view.View
-import android.widget.SeekBar
-import com.blankj.base.BaseLazyFragment
-import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BarUtils
-import com.blankj.utilcode.util.LogUtils
-import kotlinx.android.synthetic.main.fragment_bar_status_image_view.*
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2017/07/01
- * desc : demo about BarUtils
- * ```
- */
-class BarStatusImageViewFragment : BaseLazyFragment() {
-
- companion object {
- fun newInstance(): BarStatusImageViewFragment {
- return BarStatusImageViewFragment()
- }
- }
-
- private var mAlpha: Int = 0
-
- private val translucentListener = object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- mAlpha = progress
- barStatusImageViewFragmentAboutTv.text = mAlpha.toString()
- updateFakeStatusBar()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {}
- }
-
- override fun initData(bundle: Bundle?) {
- mAlpha = 112
- }
-
- override fun bindLayout(): Int {
- return R.layout.fragment_bar_status_image_view
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(barStatusImageViewFragmentSetTransparentBtn)
- barStatusImageViewFragmentChangeAlphaSb.setOnSeekBarChangeListener(translucentListener)
- barStatusImageViewFragmentAboutTv.text = mAlpha.toString()
-
- updateFakeStatusBar()
- }
-
- override fun doLazyBusiness() {
- LogUtils.d("doLazyBusiness() called")
- }
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.barStatusImageViewSetTransparentBtn -> barStatusImageViewFragmentChangeAlphaSb.progress = 0
- }
- }
-
- fun updateFakeStatusBar() {
- BarUtils.setStatusBarColor(barStatusImageViewFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0))
- }
-}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/nav/BarNavActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/nav/BarNavActivity.kt
new file mode 100644
index 0000000000..48a738ecd7
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/nav/BarNavActivity.kt
@@ -0,0 +1,88 @@
+package com.blankj.utilcode.pkg.feature.bar.nav
+
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemSwitch
+import com.blankj.common.item.CommonItemTitle
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ColorUtils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2016/10/13
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarNavActivity : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BarNavActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ override fun bindTitleRes(): Int {
+ return R.string.demo_bar
+ }
+
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList>().apply {
+ add(CommonItemTitle("navHeight", BarUtils.getNavBarHeight().toString()))
+ add(CommonItemTitle("isSupportNavBar", BarUtils.isSupportNavBar().toString()))
+ if (BarUtils.isSupportNavBar()) {
+ add(CommonItemSwitch(
+ R.string.bar_nav_visibility,
+ { BarUtils.isNavBarVisible(this@BarNavActivity) },
+ { BarUtils.setNavBarVisibility(this@BarNavActivity, it) }
+ ))
+
+ add(CommonItemSwitch(
+ R.string.bar_nav_light_mode,
+ { BarUtils.isNavBarLightMode(this@BarNavActivity) },
+ { BarUtils.setNavBarLightMode(this@BarNavActivity, it) }
+ ))
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ add(
+ CommonItemClick(
+ "getNavBarColor: ${
+ ColorUtils.int2ArgbString(
+ BarUtils.getNavBarColor(
+ this@BarNavActivity
+ )
+ )
+ }"
+ ).setOnItemClickListener() { _, item, _ ->
+ BarUtils.setNavBarColor(
+ this@BarNavActivity,
+ ColorUtils.getRandomColor()
+ )
+ itemsView.updateItems(bindItems())
+ item.title = "getNavBarColor: ${
+ ColorUtils.int2ArgbString(
+ BarUtils.getNavBarColor(this@BarNavActivity)
+ )
+ }"
+ })
+ }
+ add(CommonItemClick("transparentNavBar").setOnItemClickListener() { _, item, _ ->
+ BarUtils.transparentNavBar(this@BarNavActivity)
+ })
+ }
+ }
+ }
+
+ override fun onWindowFocusChanged(hasFocus: Boolean) {
+ super.onWindowFocusChanged(hasFocus)
+ itemsView.updateItems(bindItems())
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/notification/BarNotificationActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/notification/BarNotificationActivity.kt
new file mode 100644
index 0000000000..5504912ee6
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/notification/BarNotificationActivity.kt
@@ -0,0 +1,49 @@
+package com.blankj.utilcode.pkg.feature.bar.notification
+
+import android.content.Context
+import android.content.Intent
+import android.os.Handler
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2016/10/13
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarNotificationActivity : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BarNotificationActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ private val mHandler = Handler()
+
+ override fun bindTitleRes(): Int {
+ return R.string.demo_bar
+ }
+
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList(
+ CommonItemClick(R.string.bar_notification_show) {
+ BarUtils.setNotificationBarVisibility(true)
+ mHandler.postDelayed({ BarUtils.setNotificationBarVisibility(false) }, 2000)
+ }
+ )
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mHandler.removeCallbacksAndMessages(null)
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivity.kt
new file mode 100644
index 0000000000..da20870e79
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivity.kt
@@ -0,0 +1,55 @@
+package com.blankj.utilcode.pkg.feature.bar.status
+
+import android.content.Context
+import android.content.Intent
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemSwitch
+import com.blankj.common.item.CommonItemTitle
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.Utils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2016/10/13
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusActivity : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BarStatusActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ override fun bindTitleRes(): Int {
+ return R.string.demo_bar
+ }
+
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemTitle("getStatusBarHeight", BarUtils.getStatusBarHeight().toString()),
+ CommonItemSwitch(
+ R.string.bar_status_visibility,
+ { BarUtils.isStatusBarVisible(this) },
+ { BarUtils.setStatusBarVisibility(this, it) }
+ ),
+ CommonItemSwitch(
+ R.string.bar_status_light_mode,
+ { BarUtils.isStatusBarLightMode(this) },
+ { BarUtils.setStatusBarLightMode(this, it) }
+ )
+ )
+ }
+
+ override fun onResume() {
+ super.onResume()
+ itemsView.updateItems(bindItems())
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityAlpha.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityAlpha.kt
new file mode 100644
index 0000000000..fa886e5be5
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityAlpha.kt
@@ -0,0 +1,67 @@
+package com.blankj.utilcode.pkg.feature.bar.status
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.os.Bundle
+import android.view.View
+import android.widget.SeekBar
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemSeekBar
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ColorUtils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/05/27
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusActivityAlpha : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BarStatusActivityAlpha::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ private var mAlpha: Int = 112
+
+ override fun bindLayout(): Int {
+ return R.layout.bar_status_alpha_activity
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
+ updateStatusBar()
+ }
+
+ private fun getItems(): List> {
+ return CollectionUtils.newArrayList>(
+ CommonItemSeekBar("Status Bar Alpha", 255, object : CommonItemSeekBar.ProgressListener() {
+ override fun getCurValue(): Int {
+ return mAlpha
+ }
+
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ mAlpha = progress
+ updateStatusBar()
+ }
+ }).apply {
+ backgroundColor = ColorUtils.setAlphaComponent(backgroundColor, 0.5f)
+ }
+ )
+ }
+
+ private fun updateStatusBar() {
+ BarUtils.setStatusBarColor(this, Color.argb(mAlpha, 0, 0, 0))
+ BarUtils.addMarginTopEqualStatusBarHeight(findViewById(R.id.commonItemRv))// 其实这个只需要调用一次即可
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityColor.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityColor.kt
new file mode 100644
index 0000000000..74b6368e1b
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityColor.kt
@@ -0,0 +1,53 @@
+package com.blankj.utilcode.pkg.feature.bar.status
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ColorUtils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/05/27
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusActivityColor : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BarStatusActivityColor::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ private var mColor: Int = ColorUtils.getColor(R.color.colorPrimary)
+
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList>(
+ CommonItemClick(R.string.bar_status_random_color, ColorUtils.int2ArgbString(mColor)).setOnClickUpdateContentListener {
+ mColor = ColorUtils.getRandomColor()
+ updateStatusBar()
+ return@setOnClickUpdateContentListener ColorUtils.int2ArgbString(mColor)
+ }
+ )
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ updateStatusBar()
+ }
+
+ private fun updateStatusBar() {
+ BarUtils.setStatusBarColor(this, mColor)
+ BarUtils.addMarginTopEqualStatusBarHeight(findViewById(R.id.commonItemRv))// 其实这个只需要调用一次即可
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityCustom.kt
similarity index 56%
rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt
rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityCustom.kt
index 6ddd658e8f..0cea718cf9 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityCustom.kt
@@ -1,11 +1,11 @@
-package com.blankj.utilcode.pkg.feature.bar
+package com.blankj.utilcode.pkg.feature.bar.status
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
-import com.blankj.common.CommonBackActivity
+import com.blankj.common.activity.CommonActivity
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.BarUtils
@@ -18,30 +18,17 @@ import com.blankj.utilcode.util.BarUtils
* desc : demo about BarUtils
* ```
*/
-class BarStatusCustomActivity : CommonBackActivity() {
+class BarStatusActivityCustom : CommonActivity() {
companion object {
fun start(context: Context) {
- val starter = Intent(context, BarStatusCustomActivity::class.java)
+ val starter = Intent(context, BarStatusActivityCustom::class.java)
context.startActivity(starter)
}
}
- override fun isSwipeBack(): Boolean {
- return true
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return -1
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {}
-
- override fun doBusiness() {
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT).setBackgroundResource(R.drawable.bar_status_custom)
}
-
- override fun onDebouncingClick(view: View) {}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityDrawer.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityDrawer.kt
new file mode 100644
index 0000000000..d8e092d466
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityDrawer.kt
@@ -0,0 +1,116 @@
+package com.blankj.utilcode.pkg.feature.bar.status
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.os.Bundle
+import android.view.View
+import android.widget.SeekBar
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemSeekBar
+import com.blankj.common.item.CommonItemSwitch
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ColorUtils
+import kotlinx.android.synthetic.main.bar_status_drawer_activity.*
+
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/05/27
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusActivityDrawer : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BarStatusActivityDrawer::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ private var mColor: Int = ColorUtils.getColor(R.color.colorPrimary)
+ private var mAlpha: Int = 112
+
+ private var mAlphaStatus: Boolean = false
+ private var mFrontStatus: Boolean = false
+
+ override fun isSwipeBack(): Boolean {
+ return false
+ }
+
+ override fun bindDrawer(): Boolean {
+ return true
+ }
+
+ override fun bindLayout(): Int {
+ return R.layout.bar_status_drawer_activity
+ }
+
+ private fun getItems(): MutableList> {
+ val randomColorItem = CommonItemClick(R.string.bar_status_random_color, ColorUtils.int2ArgbString(mColor)).setOnClickUpdateContentListener {
+ mColor = ColorUtils.getRandomColor()
+ updateStatusBar()
+ return@setOnClickUpdateContentListener ColorUtils.int2ArgbString(mColor)
+ }
+
+ val alphaItem: CommonItem<*> = CommonItemSeekBar("Status Bar Alpha", 255, object : CommonItemSeekBar.ProgressListener() {
+ override fun getCurValue(): Int {
+ return mAlpha
+ }
+
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ mAlpha = progress
+ updateStatusBar()
+ }
+ })
+
+ return CollectionUtils.newArrayList(
+ CommonItemSwitch(
+ R.string.bar_status_title_alpha,
+ {
+ updateStatusBar()
+ mAlphaStatus
+ },
+ {
+ mAlphaStatus = it
+ if (mAlphaStatus) {
+ barStatusDrawerRootLl.setBackgroundResource(R.drawable.image_lena)
+ commonItemAdapter.replaceItem(2, alphaItem, true)
+ } else {
+ barStatusDrawerRootLl.setBackgroundColor(Color.TRANSPARENT)
+ commonItemAdapter.replaceItem(2, randomColorItem, true)
+ }
+ }
+ ),
+ CommonItemSwitch(
+ R.string.bar_status_is_front,
+ { mFrontStatus },
+ {
+ mFrontStatus = it
+ updateStatusBar()
+ }
+ ),
+ randomColorItem
+ )
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
+ }
+
+ private fun updateStatusBar() {
+ if (mAlphaStatus) {
+ BarUtils.setStatusBarColor4Drawer(drawerView.mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, Color.argb(mAlpha, 0, 0, 0), mFrontStatus)
+ } else {
+ BarUtils.setStatusBarColor4Drawer(drawerView.mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, mColor, mFrontStatus)
+ }
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityImageView.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityImageView.kt
new file mode 100644
index 0000000000..86542caec5
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityImageView.kt
@@ -0,0 +1,63 @@
+package com.blankj.utilcode.pkg.feature.bar.status
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.os.Bundle
+import android.view.View
+import android.widget.SeekBar
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemSeekBar
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/05/27
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusActivityImageView : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, BarStatusActivityImageView::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ private var mAlpha: Int = 112
+
+ override fun bindLayout(): Int {
+ return R.layout.bar_status_image_view_activity
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
+ updateStatusBar()
+ }
+
+ private fun getItems(): List> {
+ return CollectionUtils.newArrayList>(
+ CommonItemSeekBar("Status Bar Alpha", 255, object : CommonItemSeekBar.ProgressListener() {
+ override fun getCurValue(): Int {
+ return mAlpha
+ }
+
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ mAlpha = progress
+ updateStatusBar()
+ }
+ })
+ )
+ }
+
+ private fun updateStatusBar() {
+ BarUtils.setStatusBarColor(this, Color.argb(mAlpha, 0, 0, 0), true)
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentActivity.kt
similarity index 73%
rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentActivity.kt
index b68bdbfc1e..6df145b5be 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentActivity.kt
@@ -1,16 +1,16 @@
-package com.blankj.utilcode.pkg.feature.bar
+package com.blankj.utilcode.pkg.feature.bar.status.fragment
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentPagerAdapter
-import android.support.v4.view.ViewPager
import android.view.View
-import com.blankj.common.CommonBackActivity
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.blankj.common.activity.CommonActivity
import com.blankj.utilcode.pkg.R
-import kotlinx.android.synthetic.main.activity_bar_status_fragment.*
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import kotlinx.android.synthetic.main.bar_status_fragment_activity.*
import java.util.*
/**
@@ -21,7 +21,7 @@ import java.util.*
* desc : demo about BarUtils
* ```
*/
-class BarStatusFragmentActivity : CommonBackActivity() {
+class BarStatusFragmentActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -37,7 +37,7 @@ class BarStatusFragmentActivity : CommonBackActivity() {
R.id.barStatusFragmentNavigationCustom
)
- private val mFragmentList = ArrayList()
+ private val mFragmentList = ArrayList()
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener l@{ item ->
when (item.itemId) {
@@ -65,19 +65,18 @@ class BarStatusFragmentActivity : CommonBackActivity() {
return false
}
- override fun initData(bundle: Bundle?) {}
-
override fun bindLayout(): Int {
- return R.layout.activity_bar_status_fragment
+ return R.layout.bar_status_fragment_activity
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- mFragmentList.add(BarStatusColorFragment.newInstance())
- mFragmentList.add(BarStatusAlphaFragment.newInstance())
- mFragmentList.add(BarStatusImageViewFragment.newInstance())
- mFragmentList.add(BarStatusCustomFragment.newInstance())
+ super.initView(savedInstanceState, contentView)
+ mFragmentList.add(BarStatusFragmentColor.newInstance())
+ mFragmentList.add(BarStatusFragmentAlpha.newInstance())
+ mFragmentList.add(BarStatusFragmentImageView.newInstance())
+ mFragmentList.add(BarStatusFragmentCustom.newInstance())
- barStatusFragmentVp.offscreenPageLimit = 3
+ barStatusFragmentVp.offscreenPageLimit = mFragmentList.size - 1
barStatusFragmentVp.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
override fun getItem(position: Int): Fragment {
return mFragmentList[position]
@@ -87,7 +86,6 @@ class BarStatusFragmentActivity : CommonBackActivity() {
return mFragmentList.size
}
}
-
barStatusFragmentVp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
@@ -100,8 +98,4 @@ class BarStatusFragmentActivity : CommonBackActivity() {
barStatusFragmentNav.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentAlpha.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentAlpha.kt
new file mode 100644
index 0000000000..ab368c0295
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentAlpha.kt
@@ -0,0 +1,68 @@
+package com.blankj.utilcode.pkg.feature.bar.status.fragment
+
+import android.graphics.Color
+import android.os.Bundle
+import android.view.View
+import android.widget.SeekBar
+import com.blankj.common.fragment.CommonFragment
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemSeekBar
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ColorUtils
+import kotlinx.android.synthetic.main.bar_status_alpha_fragment.*
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/07/01
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusFragmentAlpha : CommonFragment() {
+
+ companion object {
+ fun newInstance(): BarStatusFragmentAlpha {
+ return BarStatusFragmentAlpha()
+ }
+ }
+
+ override fun isLazy(): Boolean {
+ return true
+ }
+
+ private var mAlpha: Int = 112
+
+ override fun bindLayout(): Int {
+ return R.layout.bar_status_alpha_fragment
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
+ updateFakeStatusBar()
+ }
+
+ private fun getItems(): List> {
+ return CollectionUtils.newArrayList>(
+ CommonItemSeekBar("Status Bar Alpha", 255, object : CommonItemSeekBar.ProgressListener() {
+ override fun getCurValue(): Int {
+ return mAlpha
+ }
+
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ mAlpha = progress
+ updateFakeStatusBar()
+ }
+ }).apply {
+ backgroundColor = ColorUtils.setAlphaComponent(backgroundColor, 0.5f)
+ }
+ )
+ }
+
+ fun updateFakeStatusBar() {
+ BarUtils.setStatusBarColor(barStatusAlphaFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0))
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentColor.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentColor.kt
new file mode 100644
index 0000000000..029523e59d
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentColor.kt
@@ -0,0 +1,59 @@
+package com.blankj.utilcode.pkg.feature.bar.status.fragment
+
+import android.os.Bundle
+import android.view.View
+import com.blankj.common.fragment.CommonFragment
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ColorUtils
+import kotlinx.android.synthetic.main.bar_status_color_fragment.*
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/07/01
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusFragmentColor : CommonFragment() {
+
+ companion object {
+ fun newInstance(): BarStatusFragmentColor {
+ return BarStatusFragmentColor()
+ }
+ }
+
+ private var mColor: Int = ColorUtils.getColor(R.color.colorPrimary)
+
+ override fun isLazy(): Boolean {
+ return true
+ }
+
+ override fun bindLayout(): Int {
+ return R.layout.bar_status_color_fragment
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
+ updateFakeStatusBar()
+ }
+
+ private fun getItems(): List> {
+ return CollectionUtils.newArrayList>(
+ CommonItemClick(R.string.bar_status_random_color, ColorUtils.int2ArgbString(mColor)).setOnClickUpdateContentListener {
+ mColor = ColorUtils.getRandomColor()
+ updateFakeStatusBar()
+ return@setOnClickUpdateContentListener ColorUtils.int2ArgbString(mColor)
+ }
+ )
+ }
+
+ private fun updateFakeStatusBar() {
+ BarUtils.setStatusBarColor(barStatusColorFragmentFakeStatusBar, mColor)
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt
new file mode 100644
index 0000000000..e8dbcd927c
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt
@@ -0,0 +1,38 @@
+package com.blankj.utilcode.pkg.feature.bar.status.fragment
+
+import android.os.Bundle
+import android.view.View
+import com.blankj.common.fragment.CommonFragment
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import kotlinx.android.synthetic.main.bar_status_custom_fragment.*
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/07/01
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusFragmentCustom : CommonFragment() {
+
+ companion object {
+ fun newInstance(): BarStatusFragmentCustom {
+ return BarStatusFragmentCustom()
+ }
+ }
+
+ override fun isLazy(): Boolean {
+ return true
+ }
+
+ override fun bindLayout(): Int {
+ return R.layout.bar_status_custom_fragment
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ BarUtils.setStatusBarCustom(barStatusCustomFragmentFakeStatusBar)
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentImageView.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentImageView.kt
new file mode 100644
index 0000000000..686e50995c
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentImageView.kt
@@ -0,0 +1,65 @@
+package com.blankj.utilcode.pkg.feature.bar.status.fragment
+
+import android.graphics.Color
+import android.os.Bundle
+import android.view.View
+import android.widget.SeekBar
+import com.blankj.common.fragment.CommonFragment
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemSeekBar
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.BarUtils
+import com.blankj.utilcode.util.CollectionUtils
+import kotlinx.android.synthetic.main.bar_status_image_view_fragment.*
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2017/07/01
+ * desc : demo about BarUtils
+ * ```
+ */
+class BarStatusFragmentImageView : CommonFragment() {
+
+ companion object {
+ fun newInstance(): BarStatusFragmentImageView {
+ return BarStatusFragmentImageView()
+ }
+ }
+
+ private var mAlpha: Int = 112
+
+ override fun isLazy(): Boolean {
+ return true
+ }
+
+ override fun bindLayout(): Int {
+ return R.layout.bar_status_image_view_fragment
+ }
+
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
+ updateFakeStatusBar()
+ }
+
+ private fun getItems(): List> {
+ return CollectionUtils.newArrayList>(
+ CommonItemSeekBar("Status Bar Alpha", 255, object : CommonItemSeekBar.ProgressListener() {
+ override fun getCurValue(): Int {
+ return mAlpha
+ }
+
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ mAlpha = progress
+ updateFakeStatusBar()
+ }
+ })
+ )
+ }
+
+ fun updateFakeStatusBar() {
+ BarUtils.setStatusBarColor(barStatusImageViewFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0))
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt
index 87fa450993..435a1ecbed 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt
@@ -3,16 +3,13 @@ package com.blankj.utilcode.pkg.feature.brightness
import android.content.Context
import android.content.Intent
import android.os.Build
-import android.os.Bundle
-import android.view.View
import android.widget.SeekBar
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemSeekBar
+import com.blankj.common.item.CommonItemSwitch
import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.BrightnessUtils
-import com.blankj.utilcode.util.PermissionUtils
-import com.blankj.utilcode.util.SpanUtils
-import com.blankj.utilcode.util.ToastUtils
-import kotlinx.android.synthetic.main.activity_brightness.*
+import com.blankj.utilcode.util.*
/**
* ```
@@ -22,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_brightness.*
* desc : demo about BrightnessUtils
* ```
*/
-class BrightnessActivity : CommonTitleActivity() {
+class BrightnessActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -44,65 +41,36 @@ class BrightnessActivity : CommonTitleActivity() {
}
}
- private val brightnessChangeListener = object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- BrightnessUtils.setBrightness(progress)
- updateBrightness()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {}
- }
-
- private val windowBrightnessChangeListener = object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- BrightnessUtils.setWindowBrightness(window, progress)
- updateWindowBrightness()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {}
- }
-
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_brightness)
- }
-
- override fun initData(bundle: Bundle?) {}
- override fun bindLayout(): Int {
- return R.layout.activity_brightness
+ override fun bindTitleRes(): Int {
+ return R.string.demo_brightness
}
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- brightnessChangeSb.progress = BrightnessUtils.getBrightness()
- brightnessChangeSb.setOnSeekBarChangeListener(brightnessChangeListener)
- updateBrightness()
-
- brightnessWindowChangeSb.progress = BrightnessUtils.getWindowBrightness(window)
- brightnessWindowChangeSb.setOnSeekBarChangeListener(windowBrightnessChangeListener)
- updateWindowBrightness()
-
- brightnessSetAutoCb.setOnCheckedChangeListener { buttonView, isChecked ->
- BrightnessUtils.setAutoBrightnessEnabled(isChecked)
- }
- }
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemSeekBar("getBrightness", 255, object : CommonItemSeekBar.ProgressListener() {
+ override fun getCurValue(): Int {
+ return BrightnessUtils.getBrightness()
+ }
- private fun updateBrightness() {
- SpanUtils.with(brightnessAboutTv)
- .append("getBrightness: " + BrightnessUtils.getBrightness())
- .create()
- }
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ BrightnessUtils.setBrightness(progress)
+ }
+ }),
+ CommonItemSeekBar("getWindowBrightness", 255, object : CommonItemSeekBar.ProgressListener() {
+ override fun getCurValue(): Int {
+ return BrightnessUtils.getWindowBrightness(window)
+ }
- private fun updateWindowBrightness() {
- SpanUtils.with(brightnessWindowAboutTv)
- .append("getWindowBrightness: " + BrightnessUtils.getWindowBrightness(window))
- .create()
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ BrightnessUtils.setWindowBrightness(window, progress)
+ }
+ }),
+ CommonItemSwitch(
+ R.string.brightness_auto_brightness,
+ { BrightnessUtils.isAutoBrightnessEnabled() },
+ { BrightnessUtils.setAutoBrightnessEnabled(it) }
+ )
+ )
}
-}
+}
\ No newline at end of file
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt
index 57f73ae3b8..9bd7c870d0 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt
@@ -2,14 +2,17 @@ package com.blankj.utilcode.pkg.feature.bus
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.support.annotation.Keep
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import androidx.annotation.Keep
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemTitle
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.BusUtils
-import com.blankj.utilcode.util.Utils
-import kotlinx.android.synthetic.main.activity_bus.*
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ThreadUtils
+import kotlin.random.Random
+
/**
* ```
@@ -19,27 +22,42 @@ import kotlinx.android.synthetic.main.activity_bus.*
* desc : demo about BusUtils
* ```
*/
-class BusActivity : CommonTitleActivity() {
+class BusActivity : CommonActivity() {
+
+ private val titleItem: CommonItemTitle = CommonItemTitle("", true);
- @BusUtils.Bus(tag = TAG_BUS)
+ @BusUtils.Bus(tag = TAG_BASIC_TYPE)
+ fun test(param: Int) {
+ titleItem.title = param.toString()
+ }
+
+ @BusUtils.Bus(tag = TAG_BUS, priority = 5)
fun test(param: String) {
- busAboutTv.text = param
+ titleItem.title = param
+ }
+
+ @BusUtils.Bus(tag = TAG_BUS, priority = 1)
+ fun testSameTag(param: String) {
+ if (titleItem.title.toString() == TAG_BUS) {
+ titleItem.title = "${titleItem.title} * 2"
+ }
}
@BusUtils.Bus(tag = TAG_STICKY_BUS, sticky = true)
- fun testSticky(callback: Callback?) {
- busAboutTv.text = callback?.call()
+ fun testSticky(callback: Callback) {
+ titleItem.title = callback.call()
}
@BusUtils.Bus(tag = TAG_IO, threadMode = BusUtils.ThreadMode.IO)
fun testIo() {
val currentThread = Thread.currentThread().toString()
- Utils.runOnUiThread(Runnable {
- busAboutTv.text = currentThread
+ ThreadUtils.runOnUiThread(Runnable {
+ titleItem.title = currentThread
})
}
companion object {
+ const val TAG_BASIC_TYPE = "tag_basic_type"
const val TAG_BUS = "tag_bus"
const val TAG_STICKY_BUS = "tag_sticky_bus"
const val TAG_IO = "tag_io"
@@ -50,71 +68,52 @@ class BusActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_bus)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_bus
+ override fun bindTitleRes(): Int {
+ return R.string.demo_bus
}
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- busRegister,
- busUnregister,
- busPost,
- busPostSticky,
- busPost2IoThread,
- busRemoveSticky,
- busStartCompare
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList(
+ titleItem,
+ CommonItemClick(R.string.bus_register) {
+ BusUtils.register(this)
+ },
+ CommonItemClick(R.string.bus_unregister) {
+ BusUtils.unregister(this)
+ },
+ CommonItemClick(R.string.bus_post) {
+ BusUtils.post(TAG_BUS, TAG_BUS)
+ },
+ CommonItemClick(R.string.bus_post_basic_type) {
+ BusUtils.post(TAG_BASIC_TYPE, Random(System.currentTimeMillis()).nextInt())
+ },
+ CommonItemClick(R.string.bus_post_sticky) {
+ BusUtils.postSticky(TAG_STICKY_BUS, object : Callback {
+ override fun call(): String {
+ return TAG_STICKY_BUS
+ }
+ })
+ },
+ CommonItemClick(R.string.bus_post_to_io_thread) {
+ BusUtils.post(TAG_IO)
+ },
+ CommonItemClick(R.string.bus_remove_sticky) {
+ BusUtils.removeSticky(TAG_STICKY_BUS)
+ },
+ CommonItemClick(R.string.bus_start_compare, true) {
+ BusCompareActivity.start(this)
+ }
)
}
- override fun doBusiness() {
-
- }
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.busRegister -> {
- BusUtils.register(this)
- }
- R.id.busUnregister -> {
- BusUtils.unregister(this)
- busAboutTv.text = ""
- }
- R.id.busPost -> {
- BusUtils.post(TAG_BUS, TAG_BUS)
- }
- R.id.busPostSticky -> {
- BusUtils.postSticky(TAG_STICKY_BUS, object : Callback {
- override fun call(): String {
- return TAG_STICKY_BUS
- }
- })
- }
- R.id.busPost2IoThread -> {
- BusUtils.post(TAG_IO)
- }
- R.id.busRemoveSticky -> {
- BusUtils.removeSticky(TAG_STICKY_BUS)
- }
- R.id.busStartCompare -> {
- BusCompareActivity.start(this)
- }
- }
- }
-
override fun onDestroy() {
super.onDestroy()
BusUtils.removeSticky(TAG_STICKY_BUS)
BusUtils.unregister(this)
}
+}
- @Keep
- interface Callback {
- fun call(): String
- }
+@Keep
+interface Callback {
+ fun call(): String
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt
index c4652f44e8..3064666c41 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt
@@ -2,15 +2,18 @@ package com.blankj.utilcode.pkg.feature.bus
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTaskActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemTitle
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.BusUtils
+import com.blankj.utilcode.util.CollectionUtils
import com.blankj.utilcode.util.ThreadUtils
-import kotlinx.android.synthetic.main.activity_busutils_vs_eventbus.*
import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
import java.util.*
+import java.util.concurrent.CopyOnWriteArrayList
/**
@@ -21,15 +24,9 @@ import java.util.*
* desc : demo about BusUtils
* ```
*/
-class BusCompareActivity : CommonTaskActivity() {
+class BusCompareActivity : CommonActivity() {
- override fun doInBackground() {
-
- }
-
- override fun runOnUiThread(data: Unit?) {
-
- }
+ private val titleItem: CommonItemTitle = CommonItemTitle("", true)
companion object {
fun start(context: Context) {
@@ -38,46 +35,28 @@ class BusCompareActivity : CommonTaskActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_bus)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_bus
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_busutils_vs_eventbus
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- busCompareRegister10000TimesBtn,
- busComparePostTo1Subscriber1000000TimesBtn,
- busComparePostTo100Subscribers100000TimesBtn,
- busCompareUnregister10000TimesBtn
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList(
+ titleItem,
+ CommonItemClick(R.string.bus_compare_register_10000_times) {
+ compareRegister10000Times()
+ },
+ CommonItemClick(R.string.bus_compare_post_to_1_subscriber_1000000_times) {
+ comparePostTo1Subscriber1000000Times()
+ },
+ CommonItemClick(R.string.bus_compare_post_to_100_subscriber_100000_times) {
+ comparePostTo100Subscribers100000Times()
+ },
+ CommonItemClick(R.string.bus_compare_unregister_10000_times) {
+ compareUnregister10000Times()
+ }
)
}
- override fun doBusiness() {
-
- }
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.busCompareRegister10000TimesBtn -> {
- compareRegister10000Times()
- }
- R.id.busComparePostTo1Subscriber1000000TimesBtn -> {
- comparePostTo1Subscriber1000000Times()
- }
- R.id.busComparePostTo100Subscribers100000TimesBtn -> {
- comparePostTo100Subscribers100000Times()
- }
- R.id.busCompareUnregister10000TimesBtn -> {
- compareUnregister10000Times()
- }
- }
- }
-
override fun onDestroy() {
super.onDestroy()
ThreadUtils.cancel(ThreadUtils.getCpuPool())
@@ -87,8 +66,8 @@ class BusCompareActivity : CommonTaskActivity() {
* 注册 10000 个订阅者,共执行 10 次取平均值
*/
private fun compareRegister10000Times() {
- val eventBusTests = java.util.ArrayList()
- val busUtilsTests = java.util.ArrayList()
+ val eventBusTests = CopyOnWriteArrayList()
+ val busUtilsTests = CopyOnWriteArrayList()
compareWithEventBus("Register 10000 times.", 10, 10000, object : CompareCallback {
override fun runEventBus() {
@@ -116,7 +95,15 @@ class BusCompareActivity : CommonTaskActivity() {
}
}, object : OnFinishCallback {
override fun onFinish() {
+ for (test in eventBusTests) {
+ EventBus.getDefault().unregister(test)
+ }
+ eventBusTests.clear()
+ for (test in busUtilsTests) {
+ BusUtils.unregister(test)
+ }
+ busUtilsTests.clear()
}
})
}
@@ -170,39 +157,47 @@ class BusCompareActivity : CommonTaskActivity() {
* 注销 10000 个订阅者,共执行 10 次取平均值
*/
private fun compareUnregister10000Times() {
- val tests = ArrayList()
- for (i in 0..9999) {
- val test = BusEvent()
- EventBus.getDefault().register(test)
- BusUtils.register(test)
- tests.add(test)
- }
-
- compareWithEventBus("Unregister 10000 times.", 10, 1, object : CompareCallback {
- override fun runEventBus() {
- for (test in tests) {
- EventBus.getDefault().unregister(test)
- }
- }
-
- override fun runBusUtils() {
- for (test in tests) {
- BusUtils.unregister(test)
- }
- }
-
- override fun restState() {
- for (test in tests) {
+ showLoading()
+ ThreadUtils.executeBySingle(object : ThreadUtils.SimpleTask>() {
+ override fun doInBackground(): List {
+ val tests = ArrayList()
+ for (i in 0..9999) {
+ val test = BusEvent()
EventBus.getDefault().register(test)
BusUtils.register(test)
+ tests.add(test)
}
+ return tests
}
- }, object : OnFinishCallback {
- override fun onFinish() {
- for (test in tests) {
- EventBus.getDefault().unregister(test)
- BusUtils.unregister(test)
- }
+
+ override fun onSuccess(tests: List) {
+ compareWithEventBus("Unregister 10000 times.", 10, 1, object : CompareCallback {
+ override fun runEventBus() {
+ for (test in tests) {
+ EventBus.getDefault().unregister(test)
+ }
+ }
+
+ override fun runBusUtils() {
+ for (test in tests) {
+ BusUtils.unregister(test)
+ }
+ }
+
+ override fun restState() {
+ for (test in tests) {
+ EventBus.getDefault().register(test)
+ BusUtils.register(test)
+ }
+ }
+ }, object : OnFinishCallback {
+ override fun onFinish() {
+ for (test in tests) {
+ EventBus.getDefault().unregister(test)
+ BusUtils.unregister(test)
+ }
+ }
+ })
}
})
}
@@ -216,8 +211,7 @@ class BusCompareActivity : CommonTaskActivity() {
*/
private fun compareWithEventBus(name: String, sampleSize: Int, times: Int,
callback: CompareCallback, onFinishCallback: OnFinishCallback) {
- setLoadingVisibility(true)
- setBtnEnabled(false)
+ showLoading()
ThreadUtils.executeByCpu(object : ThreadUtils.Task() {
override fun doInBackground(): String {
val dur = Array(2) { LongArray(sampleSize) }
@@ -247,41 +241,41 @@ class BusCompareActivity : CommonTaskActivity() {
override fun onSuccess(result: String?) {
onFinishCallback.onFinish()
- setBtnEnabled(true)
- setLoadingVisibility(false)
- this@BusCompareActivity.busCompareAboutTv.text = result
+ dismissLoading()
+ titleItem?.title = result
}
override fun onCancel() {
onFinishCallback.onFinish()
- setLoadingVisibility(false)
- setBtnEnabled(true)
+ dismissLoading()
}
override fun onFail(t: Throwable?) {
onFinishCallback.onFinish()
- setLoadingVisibility(false)
- setBtnEnabled(true)
+ dismissLoading()
}
})
}
+}
- private fun setBtnEnabled(enable: Boolean) {
- busCompareRegister10000TimesBtn.isEnabled = enable
- busComparePostTo1Subscriber1000000TimesBtn.isEnabled = enable
- busComparePostTo100Subscribers100000TimesBtn.isEnabled = enable
- busCompareUnregister10000TimesBtn.isEnabled = enable
- }
+interface CompareCallback {
+ fun runEventBus()
+
+ fun runBusUtils()
- interface CompareCallback {
- fun runEventBus()
+ fun restState()
+}
- fun runBusUtils()
+interface OnFinishCallback {
+ fun onFinish()
+}
- fun restState()
+class BusEvent {
+ @Subscribe
+ fun eventBusFun(param: String) {
}
- interface OnFinishCallback {
- fun onFinish()
+ @BusUtils.Bus(tag = "busUtilsFun")
+ fun busUtilsFun(param: String) {
}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusEvent.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusEvent.kt
deleted file mode 100644
index 65bfa1344b..0000000000
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusEvent.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.blankj.utilcode.pkg.feature.bus
-
-import com.blankj.utilcode.util.BusUtils
-import org.greenrobot.eventbus.Subscribe
-
-/**
- * ```
- * author: Blankj
- * blog : http://blankj.com
- * time : 2019/07/14
- * desc : demo about BusUtils
- * ```
- */
-class BusEvent {
- @Subscribe
- fun eventBusFun(param: String) {
- }
-
- @BusUtils.Bus(tag = "busUtilsFun")
- fun busUtilsFun(param: String) {
- }
-}
\ No newline at end of file
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt
index 7a70d48432..f0b8620eca 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt
@@ -2,14 +2,14 @@ package com.blankj.utilcode.pkg.feature.clean
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.os.Environment
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.CleanUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.SDCardUtils
import com.blankj.utilcode.util.SnackbarUtils
-import kotlinx.android.synthetic.main.activity_clean.*
import java.io.File
/**
@@ -20,7 +20,7 @@ import java.io.File
* desc : demo about CleanUtils
* ```
*/
-class CleanActivity : CommonTitleActivity() {
+class CleanActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -29,64 +29,46 @@ class CleanActivity : CommonTitleActivity() {
}
}
- private lateinit var snackBarRootView: View
- private lateinit var internalCachePath: String
- private lateinit var internalFilesPath: String
- private lateinit var internalDbs: String
- private lateinit var internalSp: String
- private lateinit var externalCache: String
-
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_clean)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_clean
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- snackBarRootView = findViewById(android.R.id.content)
- applyDebouncingClickListener(
- cleanInternalCacheBtn,
- cleanInternalFilesBtn,
- cleanInternalDatabasesBtn,
- cleanInternalSpBtn,
- cleanExternalCacheBtn
- )
-
- internalCachePath = cacheDir.path
- internalFilesPath = filesDir.path
- internalDbs = filesDir.parent + File.separator + "databases"
- internalSp = filesDir.parent + File.separator + "shared_prefs"
-
- if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
- externalCache = externalCacheDir.absolutePath
- }
+ override fun bindTitleRes(): Int {
+ return R.string.demo_clean
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.cleanInternalCacheBtn -> showSnackbar(CleanUtils.cleanInternalCache(), internalCachePath)
- R.id.cleanInternalFilesBtn -> showSnackbar(CleanUtils.cleanInternalFiles(), internalFilesPath)
- R.id.cleanInternalDatabasesBtn -> showSnackbar(CleanUtils.cleanInternalDbs(), internalDbs)
- R.id.cleanInternalSpBtn -> showSnackbar(CleanUtils.cleanInternalSp(), internalSp)
- R.id.cleanExternalCacheBtn -> showSnackbar(CleanUtils.cleanExternalCache(), externalCache)
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList>().apply {
+ add(CommonItemClick(R.string.clean_internal_cache) {
+ showSnackbar(CleanUtils.cleanInternalCache(), cacheDir.path)
+ })
+ add(CommonItemClick(R.string.clean_internal_files) {
+ showSnackbar(CleanUtils.cleanInternalFiles(), filesDir.path)
+ })
+ add(CommonItemClick(R.string.clean_internal_databases) {
+ showSnackbar(CleanUtils.cleanInternalDbs(), filesDir.parent + File.separator + "databases")
+ })
+ add(CommonItemClick(R.string.clean_internal_sp) {
+ showSnackbar(CleanUtils.cleanInternalSp(), filesDir.parent + File.separator + "shared_prefs")
+ })
+ if (SDCardUtils.isSDCardEnableByEnvironment()) {
+ add(CommonItemClick(R.string.clean_external_cache) {
+ showSnackbar(CleanUtils.cleanExternalCache(), externalCacheDir?.absolutePath)
+ })
+ }
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
+ add(CommonItemClick(R.string.clean_app_user_data) {
+ CleanUtils.cleanAppUserData()
+ })
+ }
}
}
private fun showSnackbar(isSuccess: Boolean, path: String?) {
- SnackbarUtils.with(snackBarRootView)
+ SnackbarUtils.with(mContentView)
.setDuration(SnackbarUtils.LENGTH_LONG)
.apply {
if (isSuccess) {
- setMessage("clean \"$path\" dir success")
+ setMessage("clean \"$path\" dir successful.")
showSuccess()
} else {
- setMessage("clean \"$path\" dir failed")
+ setMessage("clean \"$path\" dir failed.")
showError()
}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt
index fa9e372df2..7a6a112c15 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt
@@ -2,22 +2,24 @@ package com.blankj.utilcode.pkg.feature.click
import android.content.Context
import android.content.Intent
-import android.os.Bundle
import android.view.View
-import com.blankj.common.CommonTitleActivity
+import android.widget.TextView
+import androidx.annotation.StringRes
+import com.blankj.base.rv.ItemViewHolder
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.*
-import kotlinx.android.synthetic.main.activity_click.*
/**
* ```
* author: Blankj
* blog : http://blankj.com
* time : 2016/09/29
- * desc : demo about CleanUtils
+ * desc : demo about ClickUtils
* ```
*/
-class ClickActivity : CommonTitleActivity() {
+class ClickActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -26,70 +28,88 @@ class ClickActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_click)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_click
}
- override fun initData(bundle: Bundle?) {}
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ ClickItem(R.string.click_view_scale_default, Utils.Consumer {
+ ClickUtils.applyPressedViewScale(it)
+ }),
+ ClickItem(R.string.click_view_scale_half, Utils.Consumer {
+ ClickUtils.applyPressedViewScale(it, -0.5f)
+ }),
+ ClickItem(R.string.click_view_alpha_default, Utils.Consumer {
+ ClickUtils.applyPressedViewAlpha(it)
+ }),
+ ClickItem(R.string.click_bg_alpha_default, Utils.Consumer {
+ ClickUtils.applyPressedBgAlpha(it, 0.6f)
+ }),
+ ClickItem(R.string.click_bg_dark_default, Utils.Consumer {
+ ClickUtils.applyPressedBgDark(it)
+ }),
+ ClickItem(R.string.click_single_debouncing, Utils.Consumer {
+ ClickUtils.applyPressedBgDark(it)
+ ClickUtils.applySingleDebouncing(it, 5000) {
+ SnackbarUtils.with(mContentView)
+ .setMessage(StringUtils.getString(R.string.click_single_tip))
+ .setBgColor(ColorUtils.getRandomColor(false))
+ .setDuration(SnackbarUtils.LENGTH_LONG)
+ .show()
+ }
+ }),
+ ClickItem(R.string.click_global_debouncing, Utils.Consumer {
+ ClickUtils.applyPressedBgDark(it)
+ ClickUtils.applySingleDebouncing(it, 5000) {
+ SnackbarUtils.with(mContentView)
+ .setMessage(StringUtils.getString(R.string.click_global_tip))
+ .setBgColor(ColorUtils.getRandomColor(false))
+ .setDuration(SnackbarUtils.LENGTH_LONG)
+ .show()
+ }
+ }),
+ ClickItem(R.string.click_multi, Utils.Consumer {
+ ClickUtils.applyPressedBgDark(it)
+ it.setOnClickListener(object : ClickUtils.OnMultiClickListener(5) {
+ override fun onTriggerClick(v: View) {
+ ToastUtils.showShort("onTriggerClick")
+ }
- override fun bindLayout(): Int {
- return R.layout.activity_click
+ override fun onBeforeTriggerClick(v: View, count: Int) {
+ ToastUtils.showShort(count)
+ }
+ })
+ })
+ )
}
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- applyDebouncingClickListener(
- clickScaleDefaultBtn,
- clickScaleCustomBtn,
- clickSingleDebouncingBtn,
- clickGlobalDebouncingBtn,
- clickMultiBtn
- )
+ override fun onDestroy() {
+ super.onDestroy()
+ SnackbarUtils.dismiss()
+ }
+}
- ClickUtils.applyScale(clickScaleDefaultBtn)
- ClickUtils.applyScale(arrayOf(clickScaleCustomBtn), floatArrayOf(-0.5f))
- ClickUtils.applySingleDebouncing(clickSingleDebouncingBtn, 5000) {
- SnackbarUtils.with(mContentView)
- .setMessage(StringUtils.getString(R.string.click_single_tip))
- .setBgColor(ColorUtils.getRandomColor(false))
- .setDuration(SnackbarUtils.LENGTH_LONG)
- .show()
- }
- ClickUtils.applyGlobalDebouncing(clickGlobalDebouncingBtn, 5000) {
- SnackbarUtils.with(mContentView)
- .setMessage(StringUtils.getString(R.string.click_global_tip))
- .setBgColor(ColorUtils.getRandomColor(false))
- .setDuration(SnackbarUtils.LENGTH_LONG)
- .show()
- }
- clickMultiBtn.setOnClickListener(object : ClickUtils.OnMultiClickListener(5) {
- override fun onTriggerClick(v: View) {
- ToastUtils.showShort("onTriggerClick")
- }
+class ClickItem : CommonItem {
- override fun onBeforeTriggerClick(v: View, count: Int) {
- ToastUtils.showShort(count)
- }
- })
- }
+ private val mConsumer: Utils.Consumer;
+ private val mTitle: String
- override fun doBusiness() {}
+ constructor(@StringRes title: Int, consumer: Utils.Consumer) : super(R.layout.common_item_title_click) {
+ mConsumer = consumer
+ mTitle = StringUtils.getString(title)
+ }
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.clickScaleDefaultBtn -> {
- SnackbarUtils.with(mContentView)
- .setMessage(StringUtils.getString(R.string.click_scale_default))
- .setBgColor(ColorUtils.getRandomColor(false))
- .setDuration(SnackbarUtils.LENGTH_LONG)
- .show()
- }
- R.id.clickScaleCustomBtn -> {
- SnackbarUtils.with(mContentView)
- .setMessage(StringUtils.getString(R.string.click_scale_custom))
- .setBgColor(ColorUtils.getRandomColor(false))
- .setDuration(SnackbarUtils.LENGTH_LONG)
- .show()
- }
+ override fun bind(holder: ItemViewHolder, position: Int) {
+ super.bind(holder, position)
+ holder.findViewById(R.id.commonItemTitleTv).text = mTitle
+ holder.itemView.setOnClickListener() {
+ SnackbarUtils.with(it)
+ .setMessage(mTitle)
+ .setBgColor(ColorUtils.getRandomColor(false))
+ .setDuration(SnackbarUtils.LENGTH_LONG)
+ .show()
}
+ mConsumer.accept(holder.itemView)
}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clipboard/ClipboardActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clipboard/ClipboardActivity.kt
new file mode 100644
index 0000000000..824fdf02ca
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clipboard/ClipboardActivity.kt
@@ -0,0 +1,76 @@
+package com.blankj.utilcode.pkg.feature.clipboard
+
+import android.content.Context
+import android.content.Intent
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemSwitch
+import com.blankj.common.item.CommonItemTitle
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.ClipboardUtils
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.ToastUtils
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2020/09/11
+ * desc : demo about ClipboardUtils
+ * ```
+ */
+class ClipboardActivity : CommonActivity() {
+
+ private var index: Int = 0
+ private var isAddListener: Boolean = false
+ private var listener = {
+ ToastUtils.showShort(ClipboardUtils.getText())
+ }
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, ClipboardActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ override fun bindTitleRes(): Int {
+ return R.string.demo_clipboard
+ }
+
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemTitle("getText", ClipboardUtils.getText()),
+ CommonItemTitle("getLabel", ClipboardUtils.getLabel()),
+ CommonItemClick("copyText: value{$index}").setOnItemClickListener { _, _, _ ->
+ ClipboardUtils.copyText("value{${index++}}")
+ itemsView.updateItems(bindItems())
+ },
+ CommonItemClick("clear").setOnItemClickListener { _, _, _ ->
+ ClipboardUtils.clear()
+ itemsView.updateItems(bindItems())
+ },
+ CommonItemSwitch("clipChangeListener", { isAddListener }, {
+ isAddListener = it
+ if (isAddListener) {
+ ClipboardUtils.addChangedListener(listener)
+ } else {
+ ClipboardUtils.removeChangedListener(listener)
+ }
+ })
+ )
+ }
+
+ override fun onResume() {
+ super.onResume()
+ itemsView.updateItems(bindItems())
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ if (isAddListener) {
+ ClipboardUtils.removeChangedListener(listener)
+ }
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt
index f8bf16b959..d70fe14e93 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt
@@ -3,13 +3,11 @@ package com.blankj.utilcode.pkg.feature.device
import android.content.Context
import android.content.Intent
import android.os.Build
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemTitle
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.DeviceUtils
-import com.blankj.utilcode.util.SpanUtils
-import kotlinx.android.synthetic.main.activity_device.*
import java.util.*
/**
@@ -20,7 +18,7 @@ import java.util.*
* desc : demo about DeviceUtils
* ```
*/
-class DeviceActivity : CommonTitleActivity() {
+class DeviceActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -29,39 +27,30 @@ class DeviceActivity : CommonTitleActivity() {
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_device)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_device
}
- override fun initData(bundle: Bundle?) {
-
- }
-
- override fun bindLayout(): Int {
- return R.layout.activity_device
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- SpanUtils.with(deviceAboutTv)
- .appendLine("isRoot: " + DeviceUtils.isDeviceRooted())
- .apply {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- appendLine("isAdbEnabled: " + DeviceUtils.isAdbEnabled())
- }
- }
- .appendLine("getSDKVersionName: " + DeviceUtils.getSDKVersionName())
- .appendLine("getSDKVersionCode: " + DeviceUtils.getSDKVersionCode())
- .appendLine("getAndroidID: " + DeviceUtils.getAndroidID())
- .appendLine("getMacAddress: " + DeviceUtils.getMacAddress())
- .appendLine("getManufacturer: " + DeviceUtils.getManufacturer())
- .appendLine("getModel: " + DeviceUtils.getModel())
- .appendLine("getABIs: " + Arrays.asList(*DeviceUtils.getABIs()))
- .appendLine("isTablet: " + DeviceUtils.isTablet())
- .append("isEmulator: " + DeviceUtils.isEmulator())
- .create()
+ override fun bindItems(): List> {
+ return arrayListOf>().apply {
+ add(CommonItemTitle("isRoot", DeviceUtils.isDeviceRooted().toString()))
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ add(CommonItemTitle("isAdbEnabled", DeviceUtils.isAdbEnabled().toString()))
+ }
+ add(CommonItemTitle("getSDKVersionName", DeviceUtils.getSDKVersionName()))
+ add(CommonItemTitle("getSDKVersionCode", DeviceUtils.getSDKVersionCode().toString()))
+ add(CommonItemTitle("getAndroidID", DeviceUtils.getAndroidID()))
+ add(CommonItemTitle("getMacAddress", DeviceUtils.getMacAddress()))
+ add(CommonItemTitle("getManufacturer", DeviceUtils.getManufacturer()))
+ add(CommonItemTitle("getModel", DeviceUtils.getModel()))
+ add(CommonItemTitle("getABIs", Arrays.asList(*DeviceUtils.getABIs()).toString()))
+ add(CommonItemTitle("isTablet", DeviceUtils.isTablet().toString()))
+ add(CommonItemTitle("isEmulator", DeviceUtils.isEmulator().toString()))
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ add(CommonItemTitle("isDevelopmentSettingsEnabled", DeviceUtils.isDevelopmentSettingsEnabled().toString()))
+ }
+ add(CommonItemTitle("getUniqueDeviceId", DeviceUtils.getUniqueDeviceId("util")))
+ add(CommonItemTitle("isSameDevice", DeviceUtils.isSameDevice(DeviceUtils.getUniqueDeviceId()).toString()))
+ }
}
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/file/FileActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/file/FileActivity.kt
new file mode 100644
index 0000000000..de8220dd18
--- /dev/null
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/file/FileActivity.kt
@@ -0,0 +1,59 @@
+package com.blankj.utilcode.pkg.feature.file
+
+import android.content.Context
+import android.content.Intent
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemTitle
+import com.blankj.utilcode.pkg.Config.CACHE_PATH
+import com.blankj.utilcode.pkg.R
+import com.blankj.utilcode.util.CollectionUtils
+import com.blankj.utilcode.util.FileUtils
+import com.blankj.utilcode.util.PathUtils
+import com.blankj.utilcode.util.SnackbarUtils
+import java.io.File
+
+/**
+ * ```
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2016/09/29
+ * desc : demo about FileUtils
+ * ```
+ */
+class FileActivity : CommonActivity() {
+
+ companion object {
+ fun start(context: Context) {
+ val starter = Intent(context, FileActivity::class.java)
+ context.startActivity(starter)
+ }
+
+ val TEST_FILE_PATH: String = CACHE_PATH + "test_file.txt"
+ }
+
+ override fun bindTitleRes(): Int {
+ return R.string.demo_file
+ }
+
+ override fun bindItems(): MutableList> {
+ return CollectionUtils.newArrayList(
+ CommonItemTitle("isFileExists: " + PathUtils.getInternalAppFilesPath(), "" + FileUtils.isFileExists(PathUtils.getInternalAppFilesPath())),
+ CommonItemTitle("isFileExists: " + PathUtils.getExternalAppFilesPath(), "" + FileUtils.isFileExists(PathUtils.getExternalAppFilesPath())),
+ CommonItemTitle("isFileExists: " + PathUtils.getExternalStoragePath(), "" + FileUtils.isFileExists(PathUtils.getExternalStoragePath())),
+ CommonItemTitle("isFileExists: " + PathUtils.getDownloadCachePath(), "" + FileUtils.isFileExists(PathUtils.getDownloadCachePath())),
+ CommonItemTitle("isFileExists: " + PathUtils.getExternalDownloadsPath(), "" + FileUtils.isFileExists(PathUtils.getExternalDownloadsPath())),
+
+ CommonItemTitle("isFileExists: " + PathUtils.getInternalAppFilesPath(), "" + FileUtils.isFileExists(File(PathUtils.getInternalAppFilesPath()))),
+ CommonItemTitle("isFileExists: " + PathUtils.getExternalAppFilesPath(), "" + FileUtils.isFileExists(File(PathUtils.getExternalAppFilesPath()))),
+ CommonItemTitle("isFileExists: " + PathUtils.getExternalStoragePath(), "" + FileUtils.isFileExists(File(PathUtils.getExternalStoragePath()))),
+ CommonItemTitle("isFileExists: " + PathUtils.getDownloadCachePath(), "" + FileUtils.isFileExists(File(PathUtils.getDownloadCachePath()))),
+ CommonItemTitle("isFileExists: " + PathUtils.getExternalDownloadsPath(), "" + FileUtils.isFileExists(File(PathUtils.getExternalDownloadsPath())))
+ )
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ SnackbarUtils.dismiss()
+ }
+}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt
index ff34eeaae0..c5f602b9e3 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt
@@ -2,15 +2,14 @@ package com.blankj.utilcode.pkg.feature.flashlight
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import com.blankj.common.CommonTitleActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.helper.PermissionHelper
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemSwitch
+import com.blankj.common.item.CommonItemTitle
+import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.pkg.helper.PermissionHelper
-import com.blankj.utilcode.util.FlashlightUtils
-import com.blankj.utilcode.util.SpanUtils
-import com.blankj.utilcode.util.ToastUtils
-import kotlinx.android.synthetic.main.activity_flashlight.*
+import com.blankj.utilcode.util.*
/**
* ```
@@ -20,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_flashlight.*
* desc : demo about FlashlightUtils
* ```
*/
-class FlashlightActivity : CommonTitleActivity() {
+class FlashlightActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -28,48 +27,36 @@ class FlashlightActivity : CommonTitleActivity() {
ToastUtils.showLong("Didn't support flashlight.")
return
}
- PermissionHelper.requestCamera(object : PermissionHelper.OnPermissionGrantedListener {
- override fun onPermissionGranted() {
+ PermissionHelper.request(context, object : PermissionUtils.SimpleCallback {
+ override fun onGranted() {
val starter = Intent(context, FlashlightActivity::class.java)
context.startActivity(starter)
}
- }, object : PermissionHelper.OnPermissionDeniedListener {
- override fun onPermissionDenied() {
- start(context)
+
+ override fun onDenied() {
+ LogUtils.e("permission denied")
}
- })
+ }, PermissionConstants.CAMERA)
}
}
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_flashlight)
+ override fun bindTitleRes(): Int {
+ return R.string.demo_flashlight
}
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- return R.layout.activity_flashlight
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- flashlightStatusCb.isChecked = FlashlightUtils.isFlashlightOn()
- flashlightStatusCb.setOnCheckedChangeListener { buttonView, isChecked ->
- FlashlightUtils.setFlashlightStatus(isChecked)
+ override fun bindItems(): List> {
+ return CollectionUtils.newArrayList>().apply {
+ add(CommonItemTitle("isFlashlightEnable", FlashlightUtils.isFlashlightEnable().toString()))
+ if (FlashlightUtils.isFlashlightEnable()) {
+ add(CommonItemSwitch(
+ R.string.flashlight_status,
+ { FlashlightUtils.isFlashlightOn() },
+ { FlashlightUtils.setFlashlightStatus(it) }
+ ))
+ }
}
}
- override fun doBusiness() {
- updateAboutFlashlight()
- }
-
- override fun onDebouncingClick(view: View) {}
-
- private fun updateAboutFlashlight() {
- SpanUtils.with(flashlightAboutTv)
- .append("isFlashlightEnable: " + FlashlightUtils.isFlashlightEnable())
- .create()
- }
-
override fun onDestroy() {
FlashlightUtils.destroy()
super.onDestroy()
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt
index 1dbcfe51ee..a4b1450de5 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt
@@ -2,13 +2,16 @@ package com.blankj.utilcode.pkg.feature.fragment
import android.os.Bundle
import android.view.View
-import com.blankj.base.BaseLazyFragment
+import androidx.fragment.app.FragmentManager
+import com.blankj.common.fragment.CommonFragment
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.pkg.helper.DialogHelper
+import com.blankj.utilcode.util.CollectionUtils
import com.blankj.utilcode.util.ColorUtils
import com.blankj.utilcode.util.FragmentUtils
import com.blankj.utilcode.util.SpanUtils
-import kotlinx.android.synthetic.main.fragment_child.*
/**
* ```
@@ -18,7 +21,7 @@ import kotlinx.android.synthetic.main.fragment_child.*
* desc : demo about FragmentUtils
* ```
*/
-class ChildFragment : BaseLazyFragment() {
+class ChildFragment : CommonFragment() {
companion object {
fun newInstance(): ChildFragment {
@@ -29,42 +32,50 @@ class ChildFragment : BaseLazyFragment() {
}
}
- override fun initData(bundle: Bundle?) {}
+ private lateinit var fm: FragmentManager
+ private val mBgColor = ColorUtils.getRandomColor(false)
override fun bindLayout(): Int {
return R.layout.fragment_child
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- FragmentUtils.setBackgroundColor(this, ColorUtils.getRandomColor(false))
- applyDebouncingClickListener(
- fragmentChildShowStackBtn,
- fragmentChildPopBtn,
- fragmentChildRemoveBtn
- )
+ super.initView(savedInstanceState, contentView)
+ FragmentUtils.setBackgroundColor(this, mBgColor)
+ fm = fragmentManager!!
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
}
- override fun doLazyBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.fragmentChildShowStackBtn -> DialogHelper.showFragmentDialog(
- SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fragmentManager!!)))
- .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fragmentManager!!)))
- .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fragmentManager!!)))
- .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fragmentManager!!)))
- .appendLine()
- .appendLine("---all of fragments---")
- .appendLine(FragmentUtils.getAllFragments(fragmentManager!!).toString())
- .appendLine("----------------------")
- .appendLine()
- .appendLine("---stack top---")
- .appendLine(FragmentUtils.getAllFragmentsInStack(fragmentManager!!).toString())
- .appendLine("---stack bottom---")
- .create()
- )
- R.id.fragmentChildPopBtn -> FragmentUtils.pop(fragmentManager!!);
- R.id.fragmentChildRemoveBtn -> FragmentUtils.remove(this);
+ private fun getItems(): MutableList> {
+ return CollectionUtils.newArrayList>(
+ CommonItemClick(R.string.fragment_show_stack) {
+ DialogHelper.showFragmentDialog(
+ SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fm)))
+ .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fm)))
+ .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fm)))
+ .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fm)))
+ .appendLine()
+ .appendLine("---all of fragments---")
+ .appendLine(FragmentUtils.getAllFragments(fm).toString())
+ .appendLine("----------------------")
+ .appendLine()
+ .appendLine("---stack top---")
+ .appendLine(FragmentUtils.getAllFragmentsInStack(fm).toString())
+ .appendLine("---stack bottom---")
+ .create()
+ )
+ },
+ CommonItemClick(R.string.fragment_pop) {
+ FragmentUtils.pop(fm)
+ },
+ CommonItemClick(R.string.fragment_remove) {
+ FragmentUtils.remove(this)
+ },
+ SharedElementItem()
+ ).apply {
+ for (ci: CommonItem<*> in this) {
+ ci.backgroundColor = mBgColor
+ }
}
}
-}
+}
\ No newline at end of file
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
index f474cb9f22..e21eb521fb 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
@@ -2,18 +2,19 @@ package com.blankj.utilcode.pkg.feature.fragment
import android.os.Build
import android.os.Bundle
-import android.support.annotation.RequiresApi
-import android.support.v4.app.Fragment
import android.transition.*
import android.view.View
-import com.blankj.base.BaseLazyFragment
+import android.widget.ImageView
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.FragmentManager
+import com.blankj.base.rv.ItemViewHolder
+import com.blankj.common.fragment.CommonFragment
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.pkg.helper.DialogHelper
-import com.blankj.utilcode.util.ColorUtils
-import com.blankj.utilcode.util.FragmentUtils
-import com.blankj.utilcode.util.SpanUtils
-import com.blankj.utilcode.util.ToastUtils
-import kotlinx.android.synthetic.main.fragment_container.*
+import com.blankj.utilcode.util.*
+import java.util.*
/**
* ```
@@ -23,7 +24,7 @@ import kotlinx.android.synthetic.main.fragment_container.*
* desc : demo about FragmentUtils
* ```
*/
-class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener {
+class ContainerFragment : CommonFragment(), FragmentUtils.OnBackClickListener {
companion object {
fun newInstance(): ContainerFragment {
@@ -34,102 +35,115 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener
}
}
- override fun initData(bundle: Bundle?) {}
+ private lateinit var fm: FragmentManager
+ private val mBgColor = ColorUtils.getRandomColor(false)
override fun bindLayout(): Int {
return R.layout.fragment_container
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
- FragmentUtils.setBackgroundColor(this, ColorUtils.getRandomColor(false))
- applyDebouncingClickListener(
- fragmentRootShowStackBtn,
- fragmentRootAddChildBtn,
- fragmentRootAddChildStackBtn,
- fragmentRootAddHideBtn,
- fragmentRootAddHideStackBtn,
- fragmentRootAddShowBtn,
- fragmentRootPopToRootBtn,
- fragmentRootHideShowBtn,
- fragmentRootReplaceBtn
- )
+ super.initView(savedInstanceState, contentView)
+ mContentView.setBackgroundColor(mBgColor)
+ fm = fragmentManager!!
+ setCommonItems(findViewById(R.id.commonItemRv), getItems())
}
- override fun doLazyBusiness() {}
-
- override fun onDebouncingClick(view: View) {
- when (view.id) {
- R.id.fragmentRootShowStackBtn -> DialogHelper.showFragmentDialog(
- SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fragmentManager!!)))
- .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fragmentManager!!)))
- .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fragmentManager!!)))
- .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fragmentManager!!)))
- .appendLine()
- .appendLine("---all of fragments---")
- .appendLine(FragmentUtils.getAllFragments(fragmentManager!!).toString())
- .appendLine("----------------------")
- .appendLine()
- .appendLine("---stack top---")
- .appendLine(FragmentUtils.getAllFragmentsInStack(fragmentManager!!).toString())
- .appendLine("---stack bottom---")
- .create()
- )
- R.id.fragmentRootAddChildBtn -> FragmentUtils.add(
- fragmentManager!!,
- ChildFragment.newInstance(),
- id
- )
- R.id.fragmentRootAddChildStackBtn -> FragmentUtils.add(
- fragmentManager!!,
- ChildFragment.newInstance(),
- id,
- false,
- true
- )
- R.id.fragmentRootAddHideBtn -> FragmentUtils.add(
- fragmentManager!!,
- ChildFragment.newInstance(),
- id,
- true
- )
- R.id.fragmentRootAddHideStackBtn -> FragmentUtils.add(
- fragmentManager!!,
- ChildFragment.newInstance(),
- id,
- true,
- true
- )
- R.id.fragmentRootAddShowBtn -> FragmentUtils.add(
- fragmentManager!!,
- addSharedElement(ChildFragment.newInstance()),
- id,
- false,
- false
- )
- R.id.fragmentRootPopToRootBtn -> FragmentUtils.popTo(
- fragmentManager!!,
- ChildFragment::class.java,
- true
- )
- R.id.fragmentRootHideShowBtn -> {
- val fragment1 = FragmentUtils.findFragment(fragmentManager!!, ChildFragment::class.java)
- if (fragment1 != null) {
- FragmentUtils.showHide(this, fragment1)
- } else {
- ToastUtils.showLong("please add demo1 first!")
- }
+ private fun getItems(): ArrayList>? {
+ val item = SharedElementItem()
+ return CollectionUtils.newArrayList>(
+ CommonItemClick(R.string.fragment_show_stack) {
+ DialogHelper.showFragmentDialog(
+ SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fm)))
+ .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fm)))
+ .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fm)))
+ .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fm)))
+ .appendLine()
+ .appendLine("---all of fragments---")
+ .appendLine(FragmentUtils.getAllFragments(fm).toString())
+ .appendLine("----------------------")
+ .appendLine()
+ .appendLine("---stack top---")
+ .appendLine(FragmentUtils.getAllFragmentsInStack(fm).toString())
+ .appendLine("---stack bottom---")
+ .create()
+ )
+ },
+ CommonItemClick(R.string.fragment_add_child) {
+ FragmentUtils.add(
+ fm,
+ ChildFragment.newInstance(),
+ id
+ )
+ },
+ CommonItemClick(R.string.fragment_add_child_stack) {
+ FragmentUtils.add(
+ fm,
+ ChildFragment.newInstance(),
+ id,
+ false,
+ true
+ )
+ },
+ CommonItemClick(R.string.fragment_add_hide) {
+ FragmentUtils.add(
+ fm,
+ ChildFragment.newInstance(),
+ id,
+ true
+ )
+ },
+ CommonItemClick(R.string.fragment_add_hide_stack) {
+ FragmentUtils.add(
+ fm,
+ ChildFragment.newInstance(),
+ id,
+ true,
+ true
+ )
+ },
+ CommonItemClick(R.string.fragment_add_demo1_show) {
+ FragmentUtils.add(
+ fm,
+ addSharedElement(ChildFragment.newInstance()),
+ id,
+ false,
+ false
+ )
+ },
+ CommonItemClick(R.string.fragment_pop_to_root) {
+ FragmentUtils.popTo(
+ fm,
+ ChildFragment::class.java,
+ true
+ )
+ },
+ CommonItemClick(R.string.fragment_hide_demo0_show_demo1) {
+ val fragment1 = FragmentUtils.findFragment(fm, ChildFragment::class.java)
+ if (fragment1 != null) {
+ FragmentUtils.showHide(this, fragment1)
+ } else {
+ ToastUtils.showLong("please add demo1 first!")
+ }
+ },
+ CommonItemClick(R.string.fragment_replace) {
+ FragmentUtils.replace(
+ fm,
+ addSharedElement(ChildFragment.newInstance()),
+ id,
+ true,
+ item.element
+ )
+ },
+ item
+ ).apply {
+ for (ci: CommonItem<*> in this) {
+ ci.backgroundColor = mBgColor
}
- R.id.fragmentRootReplaceBtn -> FragmentUtils.replace(
- fragmentManager!!,
- addSharedElement(ChildFragment.newInstance()),
- id,
- true,
- fragmentRootSharedElementIv
- )
}
}
- private fun addSharedElement(fragment: Fragment): Fragment {
+ private fun addSharedElement(fragment: androidx.fragment.app.Fragment): androidx.fragment.app.Fragment {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
fragment.sharedElementEnterTransition = DetailTransition()
fragment.enterTransition = Fade()
@@ -143,10 +157,22 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener
}
}
+class SharedElementItem : CommonItem {
+
+ lateinit var element: ImageView;
+
+ constructor() : super(R.layout.fragment_item_shared_element)
+
+ override fun bind(holder: ItemViewHolder, position: Int) {
+ super.bind(holder, position)
+ element = holder.findViewById(R.id.fragmentRootSharedElementIv)
+ }
+}
+
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
class DetailTransition() : TransitionSet() {
init {
- ordering = TransitionSet.ORDERING_TOGETHER
+ ordering = ORDERING_TOGETHER
addTransition(ChangeBounds()).addTransition(ChangeTransform()).addTransition(ChangeImageTransform())
}
}
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
index 6c8d73e9f6..5b337e48d5 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
@@ -4,13 +4,13 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.PersistableBundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
import android.view.View
-import com.blankj.common.CommonBackActivity
+import com.blankj.common.activity.CommonActivity
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.FragmentUtils
-import kotlinx.android.synthetic.main.activity_fragment.*
+import kotlinx.android.synthetic.main.fragment_activity.*
/**
* ```
@@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.activity_fragment.*
* desc : demo about FragmentUtils
* ```
*/
-class FragmentActivity : CommonBackActivity() {
+class FragmentActivity : CommonActivity() {
companion object {
fun start(context: Context) {
@@ -29,7 +29,7 @@ class FragmentActivity : CommonBackActivity() {
}
}
- private val mFragments = arrayListOf()
+ private val mFragments = arrayListOf()
private var curIndex: Int = 0
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
@@ -50,17 +50,12 @@ class FragmentActivity : CommonBackActivity() {
}
}
- override fun isSwipeBack(): Boolean {
- return true
- }
-
- override fun initData(bundle: Bundle?) {}
-
override fun bindLayout(): Int {
- return R.layout.activity_fragment
+ return R.layout.fragment_activity
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
if (savedInstanceState != null) {
curIndex = savedInstanceState.getInt("curIndex")
}
@@ -78,10 +73,6 @@ class FragmentActivity : CommonBackActivity() {
)
}
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
-
override fun onBackPressed() {
if (!FragmentUtils.dispatchBackPress(mFragments[curIndex])) {
super.onBackPressed()
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt
index 4d266527bb..d2a9ac7bab 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.fragment
import android.os.Bundle
import android.view.View
-import com.blankj.base.BaseLazyFragment
+import com.blankj.common.fragment.CommonFragment
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ColorUtils
@@ -17,7 +17,7 @@ import kotlinx.android.synthetic.main.fragment_root.*
* desc : demo about FragmentUtils
* ```
*/
-class RootFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener {
+class RootFragment : CommonFragment(), FragmentUtils.OnBackClickListener {
companion object {
fun newInstance(): RootFragment {
@@ -28,13 +28,12 @@ class RootFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener {
}
}
- override fun initData(bundle: Bundle?) {}
-
override fun bindLayout(): Int {
return R.layout.fragment_root
}
override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
BarUtils.setStatusBarColor(rootFragmentFakeStatusBar, ColorUtils.getColor(R.color.colorPrimary))
FragmentUtils.add(
childFragmentManager,
@@ -43,10 +42,6 @@ class RootFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener {
)
}
- override fun doLazyBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
-
override fun onBackClick(): Boolean {
if (FragmentUtils.dispatchBackPress(childFragmentManager)) return true
return if (childFragmentManager.backStackEntryCount == 0) {
diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
index 544af5d321..995bbb22c1 100644
--- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
+++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
@@ -6,22 +6,19 @@ import android.graphics.Bitmap
import android.graphics.Color
import android.os.Build
import android.os.Bundle
-import android.support.annotation.StringRes
-import android.support.v7.widget.LinearLayoutManager
import android.view.View
-import android.widget.Button
-import android.widget.ImageView
-import android.widget.TextView
-import com.blankj.base.rv.BaseAdapter
-import com.blankj.base.rv.BaseCell
-import com.blankj.base.rv.BaseViewHolder
-import com.blankj.common.CommonTaskActivity
+import com.blankj.common.activity.CommonActivity
+import com.blankj.common.helper.PermissionHelper
+import com.blankj.common.item.CommonItem
+import com.blankj.common.item.CommonItemClick
+import com.blankj.common.item.CommonItemImage
+import com.blankj.common.item.CommonItemTitle
+import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.pkg.Config
import com.blankj.utilcode.pkg.R
-import com.blankj.utilcode.util.ImageUtils
-import com.blankj.utilcode.util.StringUtils
-import com.blankj.utilcode.util.ToastUtils
-import kotlinx.android.synthetic.main.activity_image.*
+import com.blankj.utilcode.util.*
+import java.io.File
+import java.util.*
/**
* ```
@@ -31,94 +28,179 @@ import kotlinx.android.synthetic.main.activity_image.*
* desc : demo about ImageUtils
* ```
*/
-class ImageActivity : CommonTaskActivity>() {
+class ImageActivity : CommonActivity() {
+
+ private val savePath = Config.CACHE_PATH + "lena.jpg"
+ private val titleItem: CommonItemTitle = CommonItemTitle("isImage: $savePath", "");
companion object {
fun start(context: Context) {
- val starter = Intent(context, ImageActivity::class.java)
- context.startActivity(starter)
+ PermissionHelper.request(context, object : PermissionUtils.SimpleCallback {
+ override fun onGranted() {
+ val starter = Intent(context, ImageActivity::class.java)
+ context.startActivity(starter)
+ }
+
+ override fun onDenied() {
+ }
+ }, PermissionConstants.STORAGE)
+ }
+ }
+
+ private val bgTask: ThreadUtils.SimpleTask>> = object : ThreadUtils.SimpleTask>>() {
+ override fun doInBackground(): List> {
+ return bindItems()
+ }
+
+ override fun onSuccess(result: List>) {
+ dismissLoading()
+ itemsView.updateItems(result)
}
}
- private lateinit var src: Bitmap
+ override fun bindTitleRes(): Int {
+ return R.string.demo_image
+ }
- override fun doInBackground(): List {
- src = ImageUtils.getBitmap(R.drawable.image_lena)
- val round = ImageUtils.getBitmap(R.drawable.main_avatar_round)
+ override fun bindItems(): ArrayList> {
+ if (ThreadUtils.isMainThread()) return arrayListOf()
+ val src = ImageUtils.getBitmap(R.drawable.image_lena)
+ val round = ImageUtils.getBitmap(R.drawable.common_avatar_round)
val watermark = ImageUtils.getBitmap(R.mipmap.ic_launcher)
val width = src.width
val height = src.height
- return ArrayList().apply {
- add(HeaderCell(src))
- add(ImageCell(R.string.image_src, src))
- add(ImageCell(R.string.image_add_color, ImageUtils.drawColor(src, Color.parseColor("#8000FF00"))))
- add(ImageCell(R.string.image_scale, ImageUtils.scale(src, width / 2, height / 2)))
- add(ImageCell(R.string.image_clip, ImageUtils.clip(src, 0, 0, width / 2, height / 2)))
- add(ImageCell(R.string.image_skew, ImageUtils.skew(src, 0.2f, 0.1f)))
- add(ImageCell(R.string.image_rotate, ImageUtils.rotate(src, 90, (width / 2).toFloat(), (height / 2).toFloat())))
- add(ImageCell(R.string.image_to_round, ImageUtils.toRound(src)))
- add(ImageCell(R.string.image_to_round_border, ImageUtils.toRound(src, 16, Color.GREEN)))
- add(ImageCell(R.string.image_to_round_corner, ImageUtils.toRoundCorner(src, 80f)))
- add(ImageCell(R.string.image_to_round_corner_border, ImageUtils.toRoundCorner(src, 80f, 16, Color.GREEN)))
- add(ImageCell(R.string.image_add_corner_border, ImageUtils.addCornerBorder(src, 16, Color.GREEN, 0f)))
- add(ImageCell(R.string.image_add_circle_border, ImageUtils.addCircleBorder(round, 16, Color.GREEN)))
- add(ImageCell(R.string.image_add_reflection, ImageUtils.addReflection(src, 80)))
- add(ImageCell(R.string.image_add_text_watermark, ImageUtils.addTextWatermark(src, "blankj", 40, Color.GREEN, 0f, 0f)))
- add(ImageCell(R.string.image_add_image_watermark, ImageUtils.addImageWatermark(src, watermark, 0, 0, 0x88)))
- add(ImageCell(R.string.image_to_gray, ImageUtils.toGray(src)))
- add(ImageCell(R.string.image_fast_blur, ImageUtils.fastBlur(src, 0.1f, 5f)))
+ titleItem.setContent(ImageUtils.isImage(savePath).toString())
+
+ return CollectionUtils.newArrayList>().apply {
+ add(titleItem)
+ add(CommonItemClick("Save to $savePath") {
+ ThreadUtils.executeBySingle(object : ThreadUtils.SimpleTask() {
+ override fun doInBackground(): Boolean {
+ return ImageUtils.save(src, savePath, Bitmap.CompressFormat.JPEG)
+ }
+
+ override fun onSuccess(result: Boolean) {
+ titleItem.setContent(ImageUtils.isImage(savePath).toString())
+ titleItem.update()
+ SnackbarUtils.with(mContentView)
+ .setDuration(SnackbarUtils.LENGTH_LONG)
+ .apply {
+ if (result) {
+ setMessage("save successful.")
+ .showSuccess(true)
+ } else {
+ setMessage("save failed.")
+ .showError(true)
+ }
+ }
+ }
+ })
+ })
+ add(CommonItemClick("Save to Album") {
+ ThreadUtils.executeBySingle(object : ThreadUtils.SimpleTask() {
+ override fun doInBackground(): File? {
+ return ImageUtils.save2Album(src, Bitmap.CompressFormat.JPEG)
+ }
+
+ override fun onSuccess(result: File?) {
+ SnackbarUtils.with(mContentView)
+ .setDuration(SnackbarUtils.LENGTH_LONG)
+ .apply {
+ if (result != null) {
+ setMessage("save successful.")
+ .showSuccess(true)
+ } else {
+ setMessage("save failed.")
+ .showError(true)
+ }
+ }
+ }
+ })
+ })
+ add(CommonItemImage(R.string.image_src) {
+ it.setImageBitmap(src)
+ })
+ add(CommonItemImage(R.string.image_add_color) {
+ it.setImageBitmap(ImageUtils.drawColor(src, Color.parseColor("#8000FF00")))
+ })
+ add(CommonItemImage(R.string.image_scale) {
+ it.setImageBitmap(ImageUtils.scale(src, width / 2, height / 2))
+ })
+ add(CommonItemImage(R.string.image_clip) {
+ it.setImageBitmap(ImageUtils.clip(src, 0, 0, width / 2, height / 2))
+ })
+ add(CommonItemImage(R.string.image_skew) {
+ it.setImageBitmap(ImageUtils.skew(src, 0.2f, 0.1f))
+ })
+ add(CommonItemImage(R.string.image_rotate) {
+ it.setImageBitmap(ImageUtils.rotate(src, 90, (width / 2).toFloat(), (height / 2).toFloat()))
+ })
+ add(CommonItemImage(R.string.image_to_round) {
+ it.setImageBitmap(ImageUtils.toRound(src))
+ })
+ add(CommonItemImage(R.string.image_to_round_border) {
+ it.setImageBitmap(ImageUtils.toRound(src, 16, Color.GREEN))
+ })
+ add(CommonItemImage(R.string.image_to_round_corner) {
+ it.setImageBitmap(ImageUtils.toRoundCorner(src, 80f))
+ })
+ add(CommonItemImage(R.string.image_to_round_corner_border) {
+ it.setImageBitmap(ImageUtils.toRoundCorner(src, 80f, 16f, Color.GREEN))
+ })
+ add(CommonItemImage(R.string.image_to_round_corner_border) {
+ it.setImageBitmap(ImageUtils.toRoundCorner(src, floatArrayOf(0f, 0f, 80f, 80f, 0f, 0f, 80f, 80f), 16f, Color.GREEN))
+ })
+ add(CommonItemImage(R.string.image_add_corner_border) {
+ it.setImageBitmap(ImageUtils.addCornerBorder(src, 16f, Color.GREEN, 80f))
+ })
+ add(CommonItemImage(R.string.image_add_corner_border) {
+ it.setImageBitmap(ImageUtils.addCornerBorder(src, 16f, Color.GREEN, floatArrayOf(0f, 0f, 80f, 80f, 0f, 0f, 80f, 80f)))
+ })
+ add(CommonItemImage(R.string.image_add_circle_border) {
+ it.setImageBitmap(ImageUtils.addCircleBorder(src, 16f, Color.GREEN))
+ })
+ add(CommonItemImage(R.string.image_add_reflection) {
+ it.setImageBitmap(ImageUtils.addReflection(src, 80))
+ })
+ add(CommonItemImage(R.string.image_add_text_watermark) {
+ it.setImageBitmap(ImageUtils.addTextWatermark(src, "blankj", 40, Color.GREEN, 0f, 0f))
+ })
+ add(CommonItemImage(R.string.image_add_image_watermark) {
+ it.setImageBitmap(ImageUtils.addImageWatermark(src, watermark, 0, 0, 0x88))
+ })
+ add(CommonItemImage(R.string.image_to_gray) {
+ it.setImageBitmap(ImageUtils.toGray(src))
+ })
+ add(CommonItemImage(R.string.image_fast_blur) {
+ it.setImageBitmap(ImageUtils.fastBlur(src, 0.1f, 5f))
+ })
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- add(ImageCell(R.string.image_render_script_blur, ImageUtils.renderScriptBlur(src, 10f)))
+ add(CommonItemImage(R.string.image_render_script_blur) {
+ it.setImageBitmap(ImageUtils.renderScriptBlur(src, 10f))
+ })
}
- add(ImageCell(R.string.image_stack_blur, ImageUtils.stackBlur(src, 10)))
- add(ImageCell(R.string.image_compress_by_scale, ImageUtils.compressByScale(src, 0.5f, 0.5f)))
- add(ImageCell(R.string.image_compress_by_quality_half, ImageUtils.compressByQuality(src, 50)))
- add(ImageCell(R.string.image_compress_by_quality_max_size, ImageUtils.compressByQuality(src, 10L * 1024)))// 10Kb
- add(ImageCell(R.string.image_compress_by_sample_size, ImageUtils.compressBySampleSize(src, 2)))
+ add(CommonItemImage(R.string.image_stack_blur) {
+ it.setImageBitmap(ImageUtils.stackBlur(src, 10))
+ })
+ add(CommonItemImage(R.string.image_compress_by_scale) {
+ it.setImageBitmap(ImageUtils.compressByScale(src, 0.5f, 0.5f))
+ })
+ add(CommonItemImage(R.string.image_compress_by_sample_size) {
+ it.setImageBitmap(ImageUtils.compressBySampleSize(src, 2))
+ })
}
}
- override fun runOnUiThread(data: List) {
- val imageAdapter = BaseAdapter()
- imageAdapter.data = data
- imageRv.adapter = imageAdapter
- imageRv.layoutManager = LinearLayoutManager(this@ImageActivity)
- }
-
- override fun bindTitle(): CharSequence {
- return getString(R.string.demo_image)
- }
-
- override fun initData(bundle: Bundle?) {}
-
- override fun bindLayout(): Int {
- isSupportScroll = false
- return R.layout.activity_image
- }
-
- override fun initView(savedInstanceState: Bundle?, contentView: View?) {}
-
- override fun doBusiness() {}
-
- override fun onDebouncingClick(view: View) {}
-}
-
-class ImageCell(@StringRes val resId: Int, private val image: Bitmap) : BaseCell(R.layout.item_image) {
-
- override fun bind(holder: BaseViewHolder, position: Int) {
- holder.findViewById(R.id.imageItemNameTv).text = StringUtils.getString(resId)
- holder.findViewById(R.id.imageItemIv).setImageBitmap(image)
+ override fun initView(savedInstanceState: Bundle?, contentView: View?) {
+ super.initView(savedInstanceState, contentView)
+ showLoading()
+ ThreadUtils.executeByIo(bgTask)
}
-}
-class HeaderCell(private val src: Bitmap) : BaseCell(R.layout.item_image_header) {
-
- override fun bind(holder: BaseViewHolder, position: Int) {
- holder.findViewById