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 fc6b83293b..73e8145bf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,87 @@ +* `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. @@ -27,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 9d987223dd..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.5-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 ac7e693288..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.5-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 057aa69945..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 = 28 + static compileSdkVersion = 29 static minSdkVersion = 14 - static targetSdkVersion = 28 - static versionCode = 1_025_005 - static versionName = '1.25.5'// 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 = '28.0.0' - 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.Entryentry : 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 ListtaskInfoList = [] + 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 @@ - - + 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 @@- + +- - - - + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> - -- - - - - - -+ @@ -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 @@\ 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 @@ 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 + ++ + 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+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + android:value="D1234567890123456789012345678901234567890" /> + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > { + 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 313389cc08..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,16 +2,18 @@ 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 + /** * ``` * author: Blankj @@ -20,28 +22,37 @@ import kotlin.random.Random * desc : demo about BusUtils * ``` */ -class BusActivity : CommonTitleActivity() { +class BusActivity : CommonActivity() { + + private val titleItem: CommonItemTitle = CommonItemTitle("", true); @BusUtils.Bus(tag = TAG_BASIC_TYPE) fun test(param: Int) { - busAboutTv.text = param.toString() + titleItem.title = param.toString() } - @BusUtils.Bus(tag = TAG_BUS) + @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 }) } @@ -57,75 +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, - busPostBasicType, - 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.busPostBasicType -> { - BusUtils.post(TAG_BASIC_TYPE, Random(System.currentTimeMillis()).nextInt()) - } - 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 4dcdaba8cd..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,41 +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()) - .appendLine("isEmulator: " + DeviceUtils.isEmulator()) - .appendLine("getUniqueDeviceId: " + DeviceUtils.getUniqueDeviceId("util")) - .appendLine("isSameDevice: " + DeviceUtils.isSameDevice(DeviceUtils.getUniqueDeviceId())) - .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 2f2abef58e..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,21 +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.ImageView -import android.widget.TextView -import com.blankj.base.rv.BaseItem -import com.blankj.base.rv.BaseItemAdapter -import com.blankj.base.rv.ItemViewHolder -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.* /** * ``` @@ -30,108 +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(ImageCell(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 = BaseItemAdapter () - imageAdapter.setHasStableIds(true) - imageAdapter.items = 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 : BaseItem { - - private lateinit var mSrc: Bitmap - private var mResId: Int = 0 - private lateinit var mImage: Bitmap - - constructor(src: Bitmap) : super(R.layout.item_image_header) { - mSrc = src - } - - constructor(@StringRes resId: Int, image: Bitmap) : super(R.layout.item_image) { - mResId = resId - mImage = image + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + showLoading() + ThreadUtils.executeByIo(bgTask) } - override fun bind(holder: ItemViewHolder, position: Int) { - if (isViewType(R.layout.item_image_header)) { - holder.setOnClickListener(R.id.imageSaveBtn) { - val save = ImageUtils.save(mSrc, Config.CACHE_PATH + "lena.jpg", Bitmap.CompressFormat.JPEG) - ToastUtils.showLong(if (save) "successful" else "failed") - } - return - } - if (isViewType(R.layout.item_image)) { - holder.findViewById (R.id.imageItemNameTv).text = StringUtils.getString(mResId) - holder.findViewById (R.id.imageItemIv).setImageBitmap(mImage) - return - } + override fun onDestroy() { + super.onDestroy() + ThreadUtils.cancel(bgTask) } } \ No newline at end of file diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/intent/IntentActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/intent/IntentActivity.kt new file mode 100644 index 0000000000..06650d0b45 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/intent/IntentActivity.kt @@ -0,0 +1,77 @@ +package com.blankj.utilcode.pkg.feature.intent + +import android.content.Context +import android.content.Intent +import android.graphics.Bitmap +import com.blankj.common.activity.CommonActivity +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick +import com.blankj.utilcode.pkg.Config +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.* +import java.util.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2020/05/29 + * desc : demo about IntentUtils + * ``` + */ +class IntentActivity : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, IntentActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitleRes(): Int { + return R.string.demo_intent + } + + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemClick("LaunchApp") { + startActivity(IntentUtils.getLaunchAppIntent(packageName)) + }, + CommonItemClick("LaunchAppDetailsSettings") { + startActivityForResult(IntentUtils.getLaunchAppDetailsSettingsIntent(packageName), 1) + }, + CommonItemClick("ShareText") { + startActivity(IntentUtils.getShareTextIntent("share content")) + }, + CommonItemClick("ShareImage") { + startActivity(IntentUtils.getShareImageIntent(getShareImagePath()[0])); + }, + CommonItemClick("ShareTextImage") { + startActivity(IntentUtils.getShareTextImageIntent("share content", getShareImagePath()[0])); + }, + CommonItemClick("ShareImages") { + startActivity(IntentUtils.getShareImageIntent(getShareImagePath())); + }, + CommonItemClick("ShareTextImages") { + startActivity(IntentUtils.getShareTextImageIntent("share content", getShareImagePath())); + } + ) + } + + private fun getShareImagePath(): LinkedList { + val shareImagePath0 = Config.CACHE_PATH + "share.jpg" + if (!FileUtils.isFile(shareImagePath0)) { + ImageUtils.save(ImageUtils.getBitmap(R.drawable.image_lena), shareImagePath0, Bitmap.CompressFormat.JPEG) + } + val shareImagePath1 = Config.CACHE_PATH + "cheetah.jpg" + if (!FileUtils.isFile(shareImagePath1)) { + ImageUtils.save(ImageUtils.getBitmap(R.drawable.span_cheetah), shareImagePath1, Bitmap.CompressFormat.JPEG) + } + return CollectionUtils.newLinkedList(shareImagePath0, shareImagePath1) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + LogUtils.d("onActivityResult() called with: requestCode = $requestCode, resultCode = $resultCode, data = $data") + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt index 22517a200b..5ed25ae4fe 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt @@ -4,12 +4,14 @@ 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 com.blankj.utilcode.pkg.helper.DialogHelper -import com.blankj.utilcode.util.KeyboardUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_keyboard.* +import com.blankj.utilcode.util.* +import kotlinx.android.synthetic.main.keyboard_activity.* /** * ``` @@ -19,7 +21,7 @@ import kotlinx.android.synthetic.main.activity_keyboard.* * desc : demo about KeyboardUtils * ``` */ -class KeyboardActivity : CommonTitleActivity() { +class KeyboardActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -28,80 +30,44 @@ class KeyboardActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_keyboard) - } + private var titleItem: CommonItemTitle = CommonItemTitle("", true) - override fun initData(bundle: Bundle?) {} + override fun bindTitleRes(): Int { + return R.string.demo_keyboard + } override fun bindLayout(): Int { - return R.layout.activity_keyboard + return R.layout.keyboard_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) KeyboardUtils.fixAndroidBug5497(this) - applyDebouncingClickListener( - keyboardHideSoftInputBtn, - keyboardShowSoftInputBtn, - keyboardToggleSoftInputBtn, - keyboardShowDialogBtn - ) - + setCommonItems(findViewById(R.id.commonItemRv), getItems()) KeyboardUtils.registerSoftInputChangedListener(this) { height -> - SpanUtils.with(keyboardAboutTv) - .appendLine("isSoftInputVisible: " + KeyboardUtils.isSoftInputVisible(this@KeyboardActivity)) - .append("height: $height") - .create() + titleItem.title = "isSoftInputVisible: " + KeyboardUtils.isSoftInputVisible(this@KeyboardActivity) + "\nkeyboardHeight: $height" if (height > 0) { keyboardEt.requestFocus() } } } - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.keyboardHideSoftInputBtn -> { - KeyboardUtils.hideSoftInput(this) - } - R.id.keyboardShowSoftInputBtn -> { - KeyboardUtils.showSoftInput(this) - } - R.id.keyboardToggleSoftInputBtn -> { - KeyboardUtils.toggleSoftInput() - } - R.id.keyboardShowDialogBtn -> { - keyboardEt.clearFocus() - DialogHelper.showKeyboardDialog() - } - } + private fun getItems(): MutableList > { + return CollectionUtils.newArrayList( + titleItem, + CommonItemClick(R.string.keyboard_hide_soft_input) { + KeyboardUtils.hideSoftInput(this) + }, + CommonItemClick(R.string.keyboard_show_soft_input) { + KeyboardUtils.showSoftInput(this) + }, + CommonItemClick(R.string.keyboard_toggle_soft_input) { + KeyboardUtils.toggleSoftInput() + }, + CommonItemClick(R.string.keyboard_show_dialog) { + keyboardEt.clearFocus() + DialogHelper.showKeyboardDialog(this) + } + ) } - -// override fun dispatchTouchEvent(ev: MotionEvent): Boolean { -// if (ev.action == MotionEvent.ACTION_DOWN) { -// val v = currentFocus -// if (isShouldHideKeyboard(v, ev)) { -// val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager -// ?: return super.dispatchTouchEvent(ev) -// imm.hideSoftInputFromWindow(v.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) -// } -// } -// return super.dispatchTouchEvent(ev) -// } -// -// // 根据 EditText 所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘 -// private fun isShouldHideKeyboard(v: View?, event: MotionEvent): Boolean { -// if (v != null && v is EditText) { -// val l = intArrayOf(0, 0) -// v.getLocationInWindow(l) -// val left = l[0] -// val top = l[1] -// val bottom = top + v.height -// val right = left + v.width -// return !(event.x > left && event.x < right -// && event.y > top && event.y < bottom) -// } -// return false -// } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt index 12f06b9d53..c928da21fa 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt @@ -2,13 +2,16 @@ package com.blankj.utilcode.pkg.feature.language 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.CommonItemSwitch +import com.blankj.common.item.CommonItemTitle import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.LanguageUtils -import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_language.* +import com.blankj.utilcode.util.SPStaticUtils +import com.blankj.utilcode.util.StringUtils import java.util.* /** @@ -19,44 +22,52 @@ import java.util.* * desc : demo about VibrateUtils * ``` */ -class LanguageActivity : CommonTitleActivity() { +class LanguageActivity : CommonActivity() { companion object { + + const val SP_KEY_IS_RELAUNCH_APP = "SP_KEY_IS_RELAUNCH_APP" + fun start(context: Context) { val starter = Intent(context, LanguageActivity::class.java) context.startActivity(starter) } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_language) - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_language + override fun bindTitleRes(): Int { + return R.string.demo_language } - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - languageApp, - languageActivity, - applySimpleChineseLanguage, - applyAmericanLanguage, - applySystemLanguage + override fun bindItems(): List > { + return CollectionUtils.newArrayList( + CommonItemTitle("isAppliedLanguage", LanguageUtils.isAppliedLanguage().toString()), + CommonItemTitle("isAppliedLanguage(SIMPLIFIED_CHINESE)", LanguageUtils.isAppliedLanguage(Locale.SIMPLIFIED_CHINESE).toString()), + CommonItemTitle("getAppliedLanguage", (LanguageUtils.getAppliedLanguage() ?: "null").toString()), + CommonItemTitle("getActivityContextLanguage", LanguageUtils.getContextLanguage(this).toString()), + CommonItemTitle("getAppContextLanguage", LanguageUtils.getAppContextLanguage().toString()), + CommonItemTitle("getSystemLanguage", LanguageUtils.getSystemLanguage().toString()), + CommonItemSwitch( + StringUtils.getString(R.string.language_relaunch_app), + { isRelaunchApp() }, + { SPStaticUtils.put(SP_KEY_IS_RELAUNCH_APP, it) } + ), + CommonItemClick(R.string.language_apply_simple_chinese) { + LanguageUtils.applyLanguage(Locale.SIMPLIFIED_CHINESE, isRelaunchApp()) + }, + CommonItemClick(R.string.language_apply_american) { + LanguageUtils.applyLanguage(Locale.US, isRelaunchApp()) + }, + CommonItemClick(R.string.language_apply_english) { + LanguageUtils.applyLanguage(Locale.ENGLISH, isRelaunchApp()) + }, + CommonItemClick(R.string.language_apply_arabic) { + LanguageUtils.applyLanguage(Locale("ar"), isRelaunchApp()) + }, + CommonItemClick(R.string.language_apply_system) { + LanguageUtils.applySystemLanguage(isRelaunchApp()) + } ) } - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.languageApp -> ToastUtils.showLong(R.string.language) - R.id.languageActivity -> ToastUtils.showLong(getString(R.string.language)) - R.id.applySimpleChineseLanguage -> LanguageUtils.applyLanguage(Locale.SIMPLIFIED_CHINESE, "com.blankj.main.pkg.MainActivity") - R.id.applyAmericanLanguage -> LanguageUtils.applyLanguage(Locale.US, "") - R.id.applySystemLanguage -> LanguageUtils.applySystemLanguage("") - } - } + private fun isRelaunchApp() = SPStaticUtils.getBoolean(SP_KEY_IS_RELAUNCH_APP) } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt index 32c1d62c9e..096df003e4 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt @@ -5,16 +5,16 @@ import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle -import android.view.View -import android.widget.CompoundButton +import android.util.Log import com.blankj.base.BaseApplication -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.CommonItemSwitch +import com.blankj.common.item.CommonItemTitle import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.AppUtils -import com.blankj.utilcode.util.LogUtils -import com.blankj.utilcode.util.PathUtils -import com.blankj.utilcode.util.StringUtils -import kotlinx.android.synthetic.main.activity_log.* +import com.blankj.utilcode.util.* +import java.io.File import java.util.* @@ -26,8 +26,7 @@ import java.util.* * desc : demo about LogUtils * ``` */ -class LogActivity : CommonTitleActivity(), - CompoundButton.OnCheckedChangeListener { +class LogActivity : CommonActivity() { companion object { private const val TAG = "CMJ" @@ -108,182 +107,160 @@ class LogActivity : CommonTitleActivity(), LogUtils.a("assert") } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_log) - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_log - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - logSwitchCb.isChecked = mConfig.isLogSwitch - logSwitchCb.setOnCheckedChangeListener(this) - - log2ConsoleSwitchCb.isChecked = mConfig.isLog2ConsoleSwitch - log2ConsoleSwitchCb.setOnCheckedChangeListener(this) - - logGlobalTagCb.isChecked = !StringUtils.isSpace(mConfig.globalTag) - logGlobalTagCb.setOnCheckedChangeListener(this) - logGlobalTagCb.text = String.format("Global Tag: %s", mConfig.globalTag) - - logHeadSwitchCb.isChecked = mConfig.isLogHeadSwitch - logHeadSwitchCb.setOnCheckedChangeListener(this) - - log2FileSwitchCb.isChecked = mConfig.isLog2FileSwitch - log2FileSwitchCb.setOnCheckedChangeListener(this) - - logDirCb.isChecked = mConfig.dir != mConfig.defaultDir - logDirCb.setOnCheckedChangeListener(this) - logDirCb.text = String.format("Dir: %s", mConfig.dir) - logBorderSwitchCb.isChecked = mConfig.isLogBorderSwitch - logBorderSwitchCb.setOnCheckedChangeListener(this) - - logSingleTagSwitchCb.isChecked = mConfig.isSingleTagSwitch - logSingleTagSwitchCb.setOnCheckedChangeListener(this) - - logConsoleFilterCb.isChecked = mConfig.consoleFilter != 'V' - logConsoleFilterCb.setOnCheckedChangeListener(this) - logConsoleFilterCb.text = String.format("ConsoleFilter: %s", mConfig.consoleFilter) - - logFileFilterCb.isChecked = mConfig.fileFilter != 'V' - logFileFilterCb.setOnCheckedChangeListener(this) - logFileFilterCb.text = String.format("FileFilter: %s", mConfig.fileFilter) - - applyDebouncingClickListener( - logNoTagBtn, - logWithTagBtn, - logInNewThreadBtn, - logNullBtn, - logManyParamsBtn, - logLongBtn, - logFileBtn, - logJsonBtn, - logXmlBtn, - logArrayBtn, - logThrowableBtn, - logBundleBtn, - logIntentBtn, - logArrayListBtn, - logMapBtn - ) - updateAboutLog() - } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.logNoTagBtn -> { - LogUtils.v("verbose") - LogUtils.d("debug") - LogUtils.i("info") - LogUtils.w("warn") - LogUtils.e("error") - LogUtils.a("assert") - } - R.id.logWithTagBtn -> { - LogUtils.vTag("customTag", "verbose") - LogUtils.dTag("customTag", "debug") - LogUtils.iTag("customTag", "info") - LogUtils.wTag("customTag", "warn") - LogUtils.eTag("customTag", "error") - LogUtils.aTag("customTag", "assert") - } - R.id.logInNewThreadBtn -> { - val thread = Thread(mRunnable) - thread.start() - } - R.id.logNullBtn -> { - LogUtils.v(null) - LogUtils.d(null) - LogUtils.i(null) - LogUtils.w(null) - LogUtils.e(null) - LogUtils.a(null) - } - R.id.logManyParamsBtn -> { - LogUtils.v("verbose0", "verbose1") - LogUtils.vTag("customTag", "verbose0", "verbose1") - LogUtils.d("debug0", "debug1") - LogUtils.dTag("customTag", "debug0", "debug1") - LogUtils.i("info0", "info1") - LogUtils.iTag("customTag", "info0", "info1") - LogUtils.w("warn0", "warn1") - LogUtils.wTag("customTag", "warn0", "warn1") - LogUtils.e("error0", "error1") - LogUtils.eTag("customTag", "error0", "error1") - LogUtils.a("assert0", "assert1") - LogUtils.aTag("customTag", "assert0", "assert1") - } - R.id.logLongBtn -> LogUtils.d(LONG_STR) - R.id.logFileBtn -> for (i in 0..99) { - LogUtils.file("test0 log to file") - LogUtils.file(LogUtils.I, "test0 log to file") - } - R.id.logJsonBtn -> { - LogUtils.json(JSON) - LogUtils.json(LogUtils.I, JSON) - } - R.id.logXmlBtn -> { - LogUtils.xml(XML) - LogUtils.xml(LogUtils.I, XML) - } - R.id.logArrayBtn -> { - LogUtils.e(ONE_D_ARRAY) - LogUtils.e(TWO_D_ARRAY) - } - R.id.logThrowableBtn -> LogUtils.e(THROWABLE) - R.id.logBundleBtn -> LogUtils.e(BUNDLE) - R.id.logIntentBtn -> LogUtils.e(INTENT) - R.id.logArrayListBtn -> LogUtils.e(LIST) - R.id.logMapBtn -> LogUtils.e(MAP) - } + override fun bindTitleRes(): Int { + return R.string.demo_log } - override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) { - when (buttonView?.id) { - R.id.logSwitchCb -> mConfig.setLogSwitch(isChecked) - R.id.log2ConsoleSwitchCb -> mConfig.setConsoleSwitch(isChecked) - R.id.logGlobalTagCb -> { - if (isChecked) { - mConfig.setGlobalTag(TAG) - } else { - mConfig.setGlobalTag("") + override fun bindItems(): List > { + return CollectionUtils.newArrayList( + CommonItemTitle("getLogFiles", LogUtils.getLogFiles().toString()), + CommonItemSwitch( + R.string.log_switch, + { mConfig.isLogSwitch }, + { mConfig.isLogSwitch = it } + ), + CommonItemSwitch( + R.string.log_console_switch, + { mConfig.isLog2ConsoleSwitch }, + { mConfig.setConsoleSwitch(it) } + ), + CommonItemSwitch( + R.string.log_console_listener_switch, + { mConfig.haveSetOnConsoleOutputListener() }, + { mConfig.setOnConsoleOutputListener { type, tag, content -> Log.println(type, tag, content) } } + ), + CommonItemClick("Global Tag", if (mConfig.globalTag == "") "null" else mConfig.globalTag).setOnClickUpdateContentListener { + if (StringUtils.isSpace(mConfig.globalTag)) { + mConfig.globalTag = TAG + } else { + mConfig.globalTag = "" + } + return@setOnClickUpdateContentListener if (mConfig.globalTag == "") "\"\"" else mConfig.globalTag + }, + CommonItemSwitch( + R.string.log_head_switch, + { mConfig.isLogHeadSwitch }, + { mConfig.isLogHeadSwitch = it } + ), + CommonItemSwitch( + R.string.log_file_switch, + { mConfig.isLog2FileSwitch }, + { mConfig.isLog2FileSwitch = it } + ), + CommonItemSwitch( + R.string.log_file_listener_switch, + { mConfig.haveSetOnFileOutputListener() }, + { mConfig.setOnFileOutputListener { filePath, content -> Log.d("LogActivity", filePath + "\n" + content) } } + ), + CommonItemClick("Dir", mConfig.dir).setOnClickUpdateContentListener { + if (mConfig.dir != mConfig.defaultDir) { + mConfig.dir = mConfig.defaultDir + } else { + mConfig.setDir(File(PathUtils.getExternalAppFilesPath(), "log")) + } + return@setOnClickUpdateContentListener mConfig.dir + }, + CommonItemSwitch( + R.string.log_border_switch, + { mConfig.isLogBorderSwitch }, + { mConfig.setBorderSwitch(it) } + ), + CommonItemSwitch( + R.string.log_single_tag_switch, + { mConfig.isSingleTagSwitch }, + { mConfig.setSingleTagSwitch(it) } + ), + CommonItemSwitch( + R.string.log_single_tag_switch, + { mConfig.isSingleTagSwitch }, + { mConfig.setSingleTagSwitch(it) } + ), + CommonItemClick("ConsoleFilter", mConfig.consoleFilter.toString()).setOnClickUpdateContentListener { + mConfig.setConsoleFilter(if (mConfig.consoleFilter == 'V') LogUtils.W else LogUtils.V) + return@setOnClickUpdateContentListener mConfig.consoleFilter.toString() + }, + CommonItemClick("FileFilter", mConfig.fileFilter.toString()).setOnClickUpdateContentListener { + mConfig.setFileFilter(if (mConfig.fileFilter == 'V') LogUtils.W else LogUtils.V) + return@setOnClickUpdateContentListener mConfig.fileFilter.toString() + }, + CommonItemClick(R.string.log_with_no_tag) { + LogUtils.v("verbose") + LogUtils.d("debug") + LogUtils.i("info") + LogUtils.w("warn") + LogUtils.e("error") + LogUtils.a("assert") + }, + CommonItemClick(R.string.log_with_tag) { + LogUtils.vTag("customTag", "verbose") + LogUtils.dTag("customTag", "debug") + LogUtils.iTag("customTag", "info") + LogUtils.wTag("customTag", "warn") + LogUtils.eTag("customTag", "error") + LogUtils.aTag("customTag", "assert") + }, + CommonItemClick(R.string.log_in_new_thread) { + val thread = Thread(mRunnable) + thread.start() + }, + CommonItemClick(R.string.log_null) { + LogUtils.v(null) + LogUtils.d(null) + LogUtils.i(null) + LogUtils.w(null) + LogUtils.e(null) + LogUtils.a(null) + }, + CommonItemClick(R.string.log_many_params) { + LogUtils.v("verbose0", "verbose1") + LogUtils.vTag("customTag", "verbose0", "verbose1") + LogUtils.d("debug0", "debug1") + LogUtils.dTag("customTag", "debug0", "debug1") + LogUtils.i("info0", "info1") + LogUtils.iTag("customTag", "info0", "info1") + LogUtils.w("warn0", "warn1") + LogUtils.wTag("customTag", "warn0", "warn1") + LogUtils.e("error0", "error1") + LogUtils.eTag("customTag", "error0", "error1") + LogUtils.a("assert0", "assert1") + LogUtils.aTag("customTag", "assert0", "assert1") + }, + CommonItemClick(R.string.log_long_string) { + LogUtils.d(LONG_STR) + }, + CommonItemClick(R.string.log_to_file) { + LogUtils.file("test0 log to file") + LogUtils.file(LogUtils.I, "test0 log to file") + }, + CommonItemClick(R.string.log_json) { + LogUtils.json(JSON) + LogUtils.json(LogUtils.I, JSON) + }, + CommonItemClick(R.string.log_xml) { + LogUtils.xml(XML) + LogUtils.xml(LogUtils.I, XML) + }, + CommonItemClick(R.string.log_array) { + LogUtils.e(ONE_D_ARRAY) + LogUtils.e(TWO_D_ARRAY) + }, + CommonItemClick(R.string.log_throwable) { + LogUtils.e(THROWABLE) + }, + CommonItemClick(R.string.log_bundle) { + LogUtils.e(BUNDLE) + }, + CommonItemClick(R.string.log_intent) { + LogUtils.e(INTENT) + }, + CommonItemClick(R.string.log_array_list) { + LogUtils.e(LIST) + }, + CommonItemClick(R.string.log_map) { + LogUtils.e(MAP) } - logGlobalTagCb.text = String.format("Global Tag: %s", mConfig.globalTag) - } - R.id.logHeadSwitchCb -> mConfig.setLogHeadSwitch(isChecked) - R.id.log2FileSwitchCb -> mConfig.setLog2FileSwitch(isChecked) - R.id.logDirCb -> { - if (isChecked) { - mConfig.setDir("") - } else { - mConfig.setDir(PathUtils.getInternalAppFilesPath() + System.getProperty("file.separator") + "test") - } - logDirCb.text = String.format("Dir: %s", mConfig.dir) - } - R.id.logBorderSwitchCb -> { - mConfig.setBorderSwitch(isChecked) - } - R.id.logSingleTagSwitchCb -> mConfig.setSingleTagSwitch(isChecked) - R.id.logConsoleFilterCb -> { - mConfig.setConsoleFilter(if (isChecked) LogUtils.W else LogUtils.V) - logConsoleFilterCb.text = String.format("ConsoleFilter: %s", mConfig.consoleFilter) - } - R.id.logFileFilterCb -> { - mConfig.setFileFilter(if (isChecked) LogUtils.W else LogUtils.V) - logFileFilterCb.text = String.format("FileFilter: %s", mConfig.fileFilter) - } - } - updateAboutLog(); - } - - private fun updateAboutLog() { - logAboutTv.text = mConfig.toString() + ) } override fun onDestroy() { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerActivity.kt index c38365f054..3d00af0e1a 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerActivity.kt @@ -3,12 +3,16 @@ package com.blankj.utilcode.pkg.feature.messenger 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.activity.CommonActivityItemsView +import com.blankj.common.activity.CommonActivityTitleView +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.MessengerUtils import com.blankj.utilcode.util.SnackbarUtils -import kotlinx.android.synthetic.main.activity_messenger.* +import com.blankj.utilcode.util.ToastUtils /** * ``` @@ -18,7 +22,7 @@ import kotlinx.android.synthetic.main.activity_messenger.* * desc : demo about MessengerUtils * ``` */ -class MessengerActivity : CommonTitleActivity() { +class MessengerActivity : CommonActivity() { companion object { const val MESSENGER_KEY = "MessengerActivity" @@ -36,40 +40,27 @@ class MessengerActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_messenger) + override fun bindTitleRes(): Int { + return R.string.demo_messenger } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_messenger - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - messengerPost2MainServerBtn, - messengerStartRemoteBtn + override fun bindItems(): List > { + return CollectionUtils.newArrayList( + CommonItemClick(R.string.messenger_post_to_main_server) { + MessengerUtils.post(MESSENGER_KEY, BUNDLE) + }, + CommonItemClick(R.string.messenger_start_remote) { + MessengerRemoteActivity.start(this) + } ) } override fun doBusiness() { - MessengerUtils.subscribe(MESSENGER_KEY, object : MessengerUtils.MessageCallback { - override fun messageCall(data: Bundle?) { - SnackbarUtils.with(mContentView) - .setMessage(data!!.getString(MESSENGER_KEY)) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .show() - } - }) - } - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.messengerPost2MainServerBtn -> { - MessengerUtils.post(MESSENGER_KEY, BUNDLE) - } - R.id.messengerStartRemoteBtn -> MessengerRemoteActivity.start(this) + MessengerUtils.subscribe(MESSENGER_KEY) { data -> + SnackbarUtils.with(mContentView) + .setMessage(data.getString(MESSENGER_KEY) ?: "") + .setDuration(SnackbarUtils.LENGTH_INDEFINITE) + .show() } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerRemoteActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerRemoteActivity.kt index 1f895ce112..acd6c58fde 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerRemoteActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerRemoteActivity.kt @@ -3,12 +3,15 @@ package com.blankj.utilcode.pkg.feature.messenger 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.activity.CommonActivityItemsView +import com.blankj.common.activity.CommonActivityTitleView +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.MessengerUtils import com.blankj.utilcode.util.SnackbarUtils -import kotlinx.android.synthetic.main.activity_messenger_remote.* /** * ``` @@ -18,7 +21,7 @@ import kotlinx.android.synthetic.main.activity_messenger_remote.* * desc : demo about MessengerUtils * ``` */ -class MessengerRemoteActivity : CommonTitleActivity() { +class MessengerRemoteActivity : CommonActivity() { companion object { const val MESSENGER_KEY = "MessengerRemoteActivity" @@ -35,42 +38,33 @@ class MessengerRemoteActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_messenger) + override fun bindTitleRes(): Int { + return R.string.demo_messenger } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_messenger_remote - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - messengerRegisterRemoteClient, - messengerUnregisterRemoteClient, - messengerRemotePost2SelfClientBtn, - messengerRemotePost2MainClientBtn + override fun bindItems(): List > { + return CollectionUtils.newArrayList( + CommonItemClick(R.string.messenger_register_remote_client) { + MessengerUtils.register() + }, + CommonItemClick(R.string.messenger_unregister_remote_client) { + MessengerUtils.unregister() + }, + CommonItemClick(R.string.messenger_post_to_self_client) { + MessengerUtils.post(MESSENGER_KEY, BUNDLE) + }, + CommonItemClick(R.string.messenger_post_to_main_server) { + MessengerUtils.post(MessengerActivity.MESSENGER_KEY, MessengerActivity.BUNDLE) + } ) } override fun doBusiness() { - MessengerUtils.subscribe(MESSENGER_KEY, object : MessengerUtils.MessageCallback { - override fun messageCall(data: Bundle?) { - SnackbarUtils.with(mContentView) - .setMessage(data!!.getString(MESSENGER_KEY)) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .show() - } - }) - } - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.messengerRegisterRemoteClient -> MessengerUtils.register() - R.id.messengerUnregisterRemoteClient -> MessengerUtils.unregister() - R.id.messengerRemotePost2SelfClientBtn -> MessengerUtils.post(MESSENGER_KEY, BUNDLE) - R.id.messengerRemotePost2MainClientBtn -> MessengerUtils.post(MessengerActivity.MESSENGER_KEY, MessengerActivity.BUNDLE) + MessengerUtils.subscribe(MESSENGER_KEY) { data -> + SnackbarUtils.with(mContentView) + .setMessage(data.getString(MESSENGER_KEY) ?: "") + .setDuration(SnackbarUtils.LENGTH_INDEFINITE) + .show() } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt index c21c7fc0b9..77bb5f8e82 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt @@ -2,13 +2,12 @@ package com.blankj.utilcode.pkg.feature.metaData 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.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.MetaDataUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_metadata.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_metadata.* * desc : demo about MetaDataUtils * ``` */ -class MetaDataActivity : CommonTitleActivity() { +class MetaDataActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -27,24 +26,14 @@ class MetaDataActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_meta_data) + override fun bindTitleRes(): Int { + return R.string.demo_meta_data } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_metadata - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - SpanUtils.with(metaDataAboutTv) - .appendLine("getMetaDataInApp: " + MetaDataUtils.getMetaDataInApp("app_meta_data")) - .append("getMetaDataInActivity: " + MetaDataUtils.getMetaDataInActivity(this, "activity_meta_data")) - .create() + override fun bindItems(): List > { + return CollectionUtils.newArrayList( + CommonItemTitle("getMetaDataInApp", MetaDataUtils.getMetaDataInApp("app_meta_data")), + CommonItemTitle("getMetaDataInActivity", MetaDataUtils.getMetaDataInActivity(this, "activity_meta_data").substring(1)) + ) } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java new file mode 100644 index 0000000000..7fff29f4a7 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java @@ -0,0 +1,43 @@ +package com.blankj.utilcode.pkg.feature.mvp; + +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.utilcode.pkg.R; + +import androidx.annotation.Nullable; + +/** + * + * author: blankj + * blog : http://blankj.com + * time : 2019/11/09 + * desc : + *+ */ +public class MvpActivity extends CommonActivity { + + public static void start(Context context) { + Intent starter = new Intent(context, MvpActivity.class); + context.startActivity(starter); + } + + @Override + public int bindTitleRes() { + return R.string.demo_mvp; + } + + @Override + public int bindLayout() { + return R.layout.mvp_activity; + } + + @Override + public void initView(@Nullable Bundle savedInstanceState, @Nullable View contentView) { + super.initView(savedInstanceState, contentView); + new MvpView(this).addPresenter(new MvpPresenter()); + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java new file mode 100644 index 0000000000..e16b4f1934 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java @@ -0,0 +1,44 @@ +package com.blankj.utilcode.pkg.feature.mvp; + +import com.blankj.base.mvp.BaseModel; +import com.blankj.utilcode.util.ThreadUtils; +import com.blankj.utilcode.util.Utils; + +/** + *+ * author: blankj + * blog : http://blankj.com + * time : 2019/11/26 + * desc : + *+ */ +public class MvpModel extends BaseModel implements MvpMvp.Model { + + private int index; + + @Override + public void onCreate() { + index = 0; + } + + @Override + public void requestUpdateMsg(final Utils.Consumerconsumer) { + ThreadUtils.executeByCached(new ThreadUtils.SimpleTask () { + @Override + public String doInBackground() throws Throwable { + Thread.sleep(2000); + return "msg: " + index++; + } + + @Override + public void onSuccess(String result) { + consumer.accept(result); + } + }); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpMvp.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpMvp.java new file mode 100644 index 0000000000..d0335ef203 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpMvp.java @@ -0,0 +1,28 @@ +package com.blankj.utilcode.pkg.feature.mvp; + +import com.blankj.utilcode.util.Utils; + +/** + * + * author: blankj + * blog : http://blankj.com + * time : 2019/11/26 + * desc : + *+ */ +public interface MvpMvp { + + interface View { + void setLoadingVisible(boolean visible); + + void showMsg(CharSequence msg); + } + + interface Presenter { + void updateMsg(); + } + + interface Model { + void requestUpdateMsg(final Utils.Consumerconsumer); + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java new file mode 100644 index 0000000000..fcb68bd3ed --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java @@ -0,0 +1,37 @@ +package com.blankj.utilcode.pkg.feature.mvp; + +import com.blankj.base.mvp.BasePresenter; +import com.blankj.utilcode.util.LogUtils; +import com.blankj.utilcode.util.Utils; + +/** + * + * author: blankj + * blog : http://blankj.com + * time : 2019/11/26 + * desc : + *+ */ +public class MvpPresenter extends BasePresenter+ implements MvpMvp.Presenter { + + @Override + public void onBindView() { + } + + @Override + public void updateMsg() { + getView().setLoadingVisible(true); + getModel(MvpModel.class).requestUpdateMsg(new Utils.Consumer () { + @Override + public void accept(String s) { + if (isAlive()) { + getView().showMsg(s); + getView().setLoadingVisible(false); + } else { + LogUtils.iTag(MvpView.TAG, "destroyed"); + } + } + }); + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpView.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpView.java new file mode 100644 index 0000000000..e916398e48 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpView.java @@ -0,0 +1,78 @@ +package com.blankj.utilcode.pkg.feature.mvp; + +import android.text.Layout; +import android.view.View; +import android.widget.TextView; + +import com.blankj.base.mvp.BaseView; +import com.blankj.utilcode.pkg.R; +import com.blankj.utilcode.util.ClickUtils; +import com.blankj.utilcode.util.LogUtils; +import com.blankj.utilcode.util.SizeUtils; +import com.blankj.utilcode.util.ThreadUtils; +import com.blankj.utilcode.util.ToastUtils; + +/** + * + * author: blankj + * blog : http://blankj.com + * time : 2019/11/26 + * desc : + *+ */ +public class MvpView extends BaseView+ implements MvpMvp.View { + + private TextView mvpTv; + private TextView mvpMeasureWidthTv; + private int i = 0; + + public MvpView(MvpActivity activity) { + super(activity); + mvpTv = activity.findViewById(R.id.mvpUpdateTv); + ClickUtils.applyPressedBgDark(mvpTv); + mvpTv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getPresenter(MvpPresenter.class).updateMsg(); + } + }); + + mvpMeasureWidthTv = activity.findViewById(R.id.mvpMeasureWidthTv); + + measure(); + } + + private void measure() { + ThreadUtils.runOnUiThreadDelayed(new Runnable() { + @Override + public void run() { + float textWidth = Layout.getDesiredWidth(mvpMeasureWidthTv.getText(), mvpMeasureWidthTv.getPaint()) + SizeUtils.dp2px(16); + float textWidth2 = mvpMeasureWidthTv.getPaint().measureText(mvpMeasureWidthTv.getText().toString()) + SizeUtils.dp2px(16); + LogUtils.i(mvpMeasureWidthTv.getWidth(), textWidth, textWidth2); + mvpMeasureWidthTv.setText(mvpMeasureWidthTv.getText().toString() + i); + measure(); + } + }, 1000); + } + + @Override + public void setLoadingVisible(boolean visible) { + final MvpActivity activity = getActivity(); + if (visible) { + activity.showLoading(new Runnable() { + @Override + public void run() { + activity.finish(); + } + }); + } else { + activity.dismissLoading(); + } + } + + @Override + public void showMsg(CharSequence msg) { + ToastUtils.showLong(msg); + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt index ba527e4c50..452040376d 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt @@ -2,16 +2,19 @@ package com.blankj.utilcode.pkg.feature.network import android.content.Context import android.content.Intent +import android.net.wifi.ScanResult +import android.net.wifi.WifiManager import android.os.Bundle -import android.text.SpannableStringBuilder 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.common.item.CommonItemTitle +import com.blankj.utilcode.constant.PermissionConstants import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.NetworkUtils -import com.blankj.utilcode.util.SpanUtils -import com.blankj.utilcode.util.ThreadUtils -import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_network.* +import com.blankj.utilcode.util.* /** * ``` @@ -21,114 +24,128 @@ import kotlinx.android.synthetic.main.activity_network.* * desc : demo about NetworkUtils * ``` */ -class NetworkActivity : CommonTitleActivity(), NetworkUtils.OnNetworkStatusChangedListener { +class NetworkActivity : CommonActivity(), NetworkUtils.OnNetworkStatusChangedListener { companion object { fun start(context: Context) { - val starter = Intent(context, NetworkActivity::class.java) - context.startActivity(starter) + PermissionHelper.request(context, object : PermissionUtils.SimpleCallback { + override fun onGranted() { + val starter = Intent(context, NetworkActivity::class.java) + context.startActivity(starter) + } + + override fun onDenied() { + } + }, PermissionConstants.LOCATION) } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_network) + private lateinit var itemsTask: ThreadUtils.SimpleTask >> + private lateinit var wifiScanResultItem: CommonItemTitle + private val consumer = Utils.Consumer
{ t -> + wifiScanResultItem.setContent(scanResults2String(t.filterResults)) + wifiScanResultItem.update() } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_network - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener(networkOpenWirelessSettingsBtn) - - networkWifiEnabledCb.setOnCheckedChangeListener { buttonView, isChecked -> - NetworkUtils.setWifiEnabled(isChecked) - updateAboutNetwork() - } - NetworkUtils.registerNetworkStatusChangedListener(this) - } - - override fun onResume() { - super.onResume() - networkWifiEnabledCb.isChecked = NetworkUtils.getWifiEnabled() - updateAboutNetwork() - } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.networkOpenWirelessSettingsBtn -> NetworkUtils.openWirelessSettings() - } + override fun bindTitleRes(): Int { + return R.string.demo_network } - private lateinit var task: ThreadUtils.SimpleTask - - private fun updateAboutNetwork() { - - SpanUtils.with(networkAboutTv) - .append(getSpan()) - .appendLine("") - .appendLine("") - .appendLine("") - .appendLine("") - .appendLine("Loading...") - .create() - - task = object : ThreadUtils.SimpleTask () { - - override fun doInBackground(): String { - val sb: StringBuilder = StringBuilder(); - sb.appendln("getIPv4Address: ${NetworkUtils.getIPAddress(true)}") - sb.appendln("getIPv6Address: ${NetworkUtils.getIPAddress(false)}") - sb.appendln("isWifiAvailable: ${NetworkUtils.isWifiAvailable()}") - sb.appendln("isAvailable: ${NetworkUtils.isAvailable()}") - sb.appendln("getBaiduDomainAddress: ${NetworkUtils.getDomainAddress("baidu.com")}") - return sb.toString() + private fun getItemsTask(): ThreadUtils.SimpleTask >> { + itemsTask = object : ThreadUtils.SimpleTask
>>() { + override fun doInBackground(): List
> { + return bindItems() } - override fun onSuccess(result: String) { - SpanUtils.with(networkAboutTv) - .append(getSpan()) - .append(result) - .create() + override fun onSuccess(result: List >) { + dismissLoading() + itemsView.updateItems(result) } } - ThreadUtils.executeByCached(task) + return itemsTask } - private fun getSpan(): SpannableStringBuilder { - return SpanUtils().appendLine("isConnected: " + NetworkUtils.isConnected()) - .appendLine("getMobileDataEnabled: " + NetworkUtils.getMobileDataEnabled()) - .appendLine("isMobileData: " + NetworkUtils.isMobileData()) - .appendLine("is4G: " + NetworkUtils.is4G()) - .appendLine("getWifiEnabled: " + NetworkUtils.getWifiEnabled()) - .appendLine("isWifiConnected: " + NetworkUtils.isWifiConnected()) - .appendLine("getNetworkOperatorName: " + NetworkUtils.getNetworkOperatorName()) - .appendLine("getNetworkTypeName: " + NetworkUtils.getNetworkType()) - .appendLine("getBroadcastIpAddress: " + NetworkUtils.getBroadcastIpAddress()) - .appendLine("getIpAddressByWifi: " + NetworkUtils.getIpAddressByWifi()) - .appendLine("getGatewayByWifi: " + NetworkUtils.getGatewayByWifi()) - .appendLine("getNetMaskByWifi: " + NetworkUtils.getNetMaskByWifi()) - .appendLine("getServerAddressByWifi: " + NetworkUtils.getServerAddressByWifi()) - .create() + override fun bindItems(): List > { + if (ThreadUtils.isMainThread()) return arrayListOf() + wifiScanResultItem = CommonItemTitle("getWifiScanResult", scanResults2String(NetworkUtils.getWifiScanResult().filterResults)) + return CollectionUtils.newArrayList( + CommonItemTitle("isConnected", NetworkUtils.isConnected().toString()), + CommonItemTitle("getMobileDataEnabled", NetworkUtils.getMobileDataEnabled().toString()), + CommonItemTitle("isMobileData", NetworkUtils.isMobileData().toString()), + CommonItemTitle("is4G", NetworkUtils.is4G().toString()), + CommonItemTitle("is5G", NetworkUtils.is5G().toString()), + CommonItemTitle("isWifiConnected", NetworkUtils.isWifiConnected().toString()), + CommonItemTitle("getNetworkOperatorName", NetworkUtils.getNetworkOperatorName()), + CommonItemTitle("getNetworkTypeName", NetworkUtils.getNetworkType().toString()), + CommonItemTitle("getBroadcastIpAddress", NetworkUtils.getBroadcastIpAddress()), + CommonItemTitle("getIpAddressByWifi", NetworkUtils.getIpAddressByWifi()), + CommonItemTitle("getGatewayByWifi", NetworkUtils.getGatewayByWifi()), + CommonItemTitle("getNetMaskByWifi", NetworkUtils.getNetMaskByWifi()), + CommonItemTitle("getServerAddressByWifi", NetworkUtils.getServerAddressByWifi()), + CommonItemTitle("getSSID", NetworkUtils.getSSID()), + + CommonItemTitle("getIPv4Address", NetworkUtils.getIPAddress(true)), + CommonItemTitle("getIPv6Address", NetworkUtils.getIPAddress(false)), + CommonItemTitle("isWifiAvailable", NetworkUtils.isWifiAvailable().toString()), + CommonItemTitle("isAvailable", NetworkUtils.isAvailable().toString()), + CommonItemTitle("getBaiduDomainAddress", NetworkUtils.getDomainAddress("baidu.com")), + wifiScanResultItem, + + CommonItemSwitch( + R.string.network_wifi_enabled, + { + val wifiEnabled = NetworkUtils.getWifiEnabled() + if (wifiEnabled) { + NetworkUtils.addOnWifiChangedConsumer(consumer) + } else { + NetworkUtils.removeOnWifiChangedConsumer(consumer) + } + wifiEnabled + }, + { + NetworkUtils.setWifiEnabled(it) + ThreadUtils.executeByIo(getItemsTask()) + } + ), + CommonItemClick(R.string.network_open_wireless_settings) { + NetworkUtils.openWirelessSettings() + } + ) + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + NetworkUtils.registerNetworkStatusChangedListener(this) + updateItems() } override fun onDisconnected() { ToastUtils.showLong("onDisconnected") + updateItems() } override fun onConnected(networkType: NetworkUtils.NetworkType) { - - ToastUtils.showLong("onConnected: ${networkType.name}") + updateItems() + } + + private fun updateItems() { + showLoading() + ThreadUtils.executeByIo(getItemsTask()) } override fun onDestroy() { - task.cancel() - NetworkUtils.unregisterNetworkStatusChangedListener(this) super.onDestroy() + ThreadUtils.cancel(itemsTask) + NetworkUtils.unregisterNetworkStatusChangedListener(this) + NetworkUtils.removeOnWifiChangedConsumer(consumer) + } + + private fun scanResults2String(results: List ): String { + val sb: StringBuilder = StringBuilder() + for (result in results) { + sb.append(String.format("${result.SSID}, Level: ${WifiManager.calculateSignalLevel(result.level, 4)}\n")) + } + return sb.toString() } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/notification/NotificationActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/notification/NotificationActivity.kt new file mode 100644 index 0000000000..d69c30b6cd --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/notification/NotificationActivity.kt @@ -0,0 +1,69 @@ +package com.blankj.utilcode.pkg.feature.notification + +import android.app.PendingIntent +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.CommonItemTitle +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.NotificationUtils +import com.blankj.utilcode.util.ToastUtils + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2019/10/22 + * desc : demo about NotificationUtils + * ``` + */ +class NotificationActivity : CommonActivity() { + + private var id: Int = 0 + private var cancelId: Int = 0 + + companion object { + fun start(context: Context) { + val starter = Intent(context, NotificationActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitleRes(): Int { + return R.string.demo_notification + } + + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemTitle("areNotificationsEnabled", NotificationUtils.areNotificationsEnabled().toString()), + CommonItemClick(R.string.notification_notify) { + NotificationUtils.notify(id++) { param -> + intent.putExtra("id", id); + param.setSmallIcon(R.mipmap.ic_launcher) + .setContentTitle("title") + .setContentText("content text: $id") + .setContentIntent(PendingIntent.getActivity(mActivity, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)) + .setAutoCancel(true) + null + } + }, + CommonItemClick(R.string.notification_cancel) { + if (cancelId < id) { + NotificationUtils.cancel(cancelId++) + } else { + ToastUtils.showShort("No notification.") + } + }, + CommonItemClick(R.string.notification_cancel_all) { + NotificationUtils.cancelAll() + cancelId = id; + }, + CommonItemClick(R.string.notification_show) { + NotificationUtils.setNotificationBarVisibility(true) + } + ) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt index 676d42d5aa..b5f657286d 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt @@ -2,13 +2,12 @@ package com.blankj.utilcode.pkg.feature.path 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.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.PathUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_path.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_path.* * desc : demo about PathUtils * ``` */ -class PathActivity : CommonTitleActivity() { +class PathActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -27,61 +26,51 @@ class PathActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_path) + override fun bindTitleRes(): Int { + return R.string.demo_path } - override fun initData(bundle: Bundle?) {} + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemTitle("getRootPath", PathUtils.getRootPath()), + CommonItemTitle("getDataPath", PathUtils.getDataPath()), + CommonItemTitle("getDownloadCachePath", PathUtils.getDownloadCachePath()), - override fun bindLayout(): Int { - return R.layout.activity_path - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - SpanUtils.with(pathAboutTv) - .appendLine("getRootPath: " + PathUtils.getRootPath()) - .appendLine("getDataPath: " + PathUtils.getDataPath()) - .appendLine("getDownloadCachePath: " + PathUtils.getDownloadCachePath()) - - .appendLine("getInternalAppDataPath: " + PathUtils.getInternalAppDataPath()) - .appendLine("getInternalAppCodeCacheDir: " + PathUtils.getInternalAppCodeCacheDir()) - .appendLine("getInternalAppCachePath: " + PathUtils.getInternalAppCachePath()) - .appendLine("getInternalAppDbsPath: " + PathUtils.getInternalAppDbsPath()) - .appendLine("getInternalAppDbPath: " + PathUtils.getInternalAppDbPath("demo")) - .appendLine("getInternalAppFilesPath: " + PathUtils.getInternalAppFilesPath()) - .appendLine("getInternalAppSpPath: " + PathUtils.getInternalAppSpPath()) - .appendLine("getInternalAppNoBackupFilesPath: " + PathUtils.getInternalAppNoBackupFilesPath()) + CommonItemTitle("getInternalAppDataPath", PathUtils.getInternalAppDataPath()), + CommonItemTitle("getInternalAppCodeCacheDir", PathUtils.getInternalAppCodeCacheDir()), + CommonItemTitle("getInternalAppCachePath", PathUtils.getInternalAppCachePath()), + CommonItemTitle("getInternalAppDbsPath", PathUtils.getInternalAppDbsPath()), + CommonItemTitle("getInternalAppDbPath", PathUtils.getInternalAppDbPath("demo")), + CommonItemTitle("getInternalAppFilesPath", PathUtils.getInternalAppFilesPath()), + CommonItemTitle("getInternalAppSpPath", PathUtils.getInternalAppSpPath()), + CommonItemTitle("getInternalAppNoBackupFilesPath", PathUtils.getInternalAppNoBackupFilesPath()), - .appendLine("getExternalStoragePath: " + PathUtils.getExternalStoragePath()) - .appendLine("getExternalMusicPath: " + PathUtils.getExternalMusicPath()) - .appendLine("getExternalPodcastsPath: " + PathUtils.getExternalPodcastsPath()) - .appendLine("getExternalRingtonesPath: " + PathUtils.getExternalRingtonesPath()) - .appendLine("getExternalAlarmsPath: " + PathUtils.getExternalAlarmsPath()) - .appendLine("getExternalNotificationsPath: " + PathUtils.getExternalNotificationsPath()) - .appendLine("getExternalPicturesPath: " + PathUtils.getExternalPicturesPath()) - .appendLine("getExternalMoviesPath: " + PathUtils.getExternalMoviesPath()) - .appendLine("getExternalDownloadsPath: " + PathUtils.getExternalDownloadsPath()) - .appendLine("getExternalDcimPath: " + PathUtils.getExternalDcimPath()) - .appendLine("getExternalDocumentsPath: " + PathUtils.getExternalDocumentsPath()) + CommonItemTitle("getExternalStoragePath", PathUtils.getExternalStoragePath()), + CommonItemTitle("getExternalMusicPath", PathUtils.getExternalMusicPath()), + CommonItemTitle("getExternalPodcastsPath", PathUtils.getExternalPodcastsPath()), + CommonItemTitle("getExternalRingtonesPath", PathUtils.getExternalRingtonesPath()), + CommonItemTitle("getExternalAlarmsPath", PathUtils.getExternalAlarmsPath()), + CommonItemTitle("getExternalNotificationsPath", PathUtils.getExternalNotificationsPath()), + CommonItemTitle("getExternalPicturesPath", PathUtils.getExternalPicturesPath()), + CommonItemTitle("getExternalMoviesPath", PathUtils.getExternalMoviesPath()), + CommonItemTitle("getExternalDownloadsPath", PathUtils.getExternalDownloadsPath()), + CommonItemTitle("getExternalDcimPath", PathUtils.getExternalDcimPath()), + CommonItemTitle("getExternalDocumentsPath", PathUtils.getExternalDocumentsPath()), - .appendLine("getExternalAppDataPath: " + PathUtils.getExternalAppDataPath()) - .appendLine("getExternalAppCachePath: " + PathUtils.getExternalAppCachePath()) - .appendLine("getExternalAppFilesPath: " + PathUtils.getExternalAppFilesPath()) - .appendLine("getExternalAppMusicPath: " + PathUtils.getExternalAppMusicPath()) - .appendLine("getExternalAppPodcastsPath: " + PathUtils.getExternalAppPodcastsPath()) - .appendLine("getExternalAppRingtonesPath: " + PathUtils.getExternalAppRingtonesPath()) - .appendLine("getExternalAppAlarmsPath: " + PathUtils.getExternalAppAlarmsPath()) - .appendLine("getExternalAppNotificationsPath: " + PathUtils.getExternalAppNotificationsPath()) - .appendLine("getExternalAppPicturesPath: " + PathUtils.getExternalAppPicturesPath()) - .appendLine("getExternalAppMoviesPath: " + PathUtils.getExternalAppMoviesPath()) - .appendLine("getExternalAppDownloadPath: " + PathUtils.getExternalAppDownloadPath()) - .appendLine("getExternalAppDcimPath: " + PathUtils.getExternalAppDcimPath()) - .appendLine("getExternalAppDocumentsPath: " + PathUtils.getExternalAppDocumentsPath()) - .appendLine("getExternalAppObbPath: " + PathUtils.getExternalAppObbPath()) - .create() + CommonItemTitle("getExternalAppDataPath", PathUtils.getExternalAppDataPath()), + CommonItemTitle("getExternalAppCachePath", PathUtils.getExternalAppCachePath()), + CommonItemTitle("getExternalAppFilesPath", PathUtils.getExternalAppFilesPath()), + CommonItemTitle("getExternalAppMusicPath", PathUtils.getExternalAppMusicPath()), + CommonItemTitle("getExternalAppPodcastsPath", PathUtils.getExternalAppPodcastsPath()), + CommonItemTitle("getExternalAppRingtonesPath", PathUtils.getExternalAppRingtonesPath()), + CommonItemTitle("getExternalAppAlarmsPath", PathUtils.getExternalAppAlarmsPath()), + CommonItemTitle("getExternalAppNotificationsPath", PathUtils.getExternalAppNotificationsPath()), + CommonItemTitle("getExternalAppPicturesPath", PathUtils.getExternalAppPicturesPath()), + CommonItemTitle("getExternalAppMoviesPath", PathUtils.getExternalAppMoviesPath()), + CommonItemTitle("getExternalAppDownloadPath", PathUtils.getExternalAppDownloadPath()), + CommonItemTitle("getExternalAppDcimPath", PathUtils.getExternalAppDcimPath()), + CommonItemTitle("getExternalAppDocumentsPath", PathUtils.getExternalAppDocumentsPath()), + CommonItemTitle("getExternalAppObbPath", PathUtils.getExternalAppObbPath()) + ) } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt index 4c18223701..c55d9c945b 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt @@ -1,17 +1,18 @@ package com.blankj.utilcode.pkg.feature.permission -import android.Manifest +import android.Manifest.permission 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.helper.PermissionHelper +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.constant.PermissionConstants import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.* -import kotlinx.android.synthetic.main.activity_permission.* /** * ``` @@ -21,7 +22,7 @@ import kotlinx.android.synthetic.main.activity_permission.* * desc : demo about PermissionUtils * ``` */ -class PermissionActivity : CommonTitleActivity() { +class PermissionActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -30,70 +31,78 @@ class PermissionActivity : CommonTitleActivity() { } } - private lateinit var permissions: String - - override fun bindTitle(): CharSequence { - return getString(R.string.demo_permission) - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_permission - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - permissionOpenAppSettingsBtn, - permissionRequestCalendarBtn, - permissionRequestRecordAudioBtn, - permissionRequestCalendarAndRecordAudioBtn, - permissionRequestWriteSettings, - permissionRequestDrawOverlays - ) - - val sb = StringBuilder() - for (s in PermissionUtils.getPermissions()) { - sb.append(s.substring(s.lastIndexOf('.') + 1)).append("\n") + private val permissions: String + + init { + val permissionList = PermissionUtils.getPermissions() + if (permissionList.isEmpty()) { + permissions = "" + } else { + val sb = StringBuilder() + for (permission in permissionList) { + sb.append("\n").append(permission.substring(permission.lastIndexOf('.') + 1)) + } + permissions = sb.deleteCharAt(0).toString() } - permissions = sb.toString() } - override fun onResume() { - super.onResume() - Utils.runOnUiThreadDelayed(Runnable(this@PermissionActivity::updateAboutPermission), 100) + override fun bindTitleRes(): Int { + return R.string.demo_permission } - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.permissionOpenAppSettingsBtn -> PermissionUtils.launchAppDetailsSettings() - R.id.permissionRequestCalendarBtn -> requestCalendar() - R.id.permissionRequestRecordAudioBtn -> requestRecordAudio() - R.id.permissionRequestCalendarAndRecordAudioBtn -> requestCalendarAndRecordAudio() - R.id.permissionRequestWriteSettings -> requestWriteSettings() - R.id.permissionRequestDrawOverlays -> requestDrawOverlays() + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList >().apply { + add(CommonItemTitle("Permissions", permissions)) + add(CommonItemClick(R.string.permission_open_app_settings, true) { PermissionUtils.launchAppDetailsSettings() }) + add(CommonItemSwitch( + R.string.permission_calendar_status, + { PermissionUtils.isGranted(PermissionConstants.CALENDAR) }, + { requestCalendar() } + )) + add(CommonItemSwitch( + R.string.permission_record_audio_status, + { PermissionUtils.isGranted(PermissionConstants.MICROPHONE) }, + { requestRecordAudio() } + )) + add(CommonItemSwitch( + R.string.permission_calendar_and_record_audio_status, + { PermissionUtils.isGranted(PermissionConstants.CALENDAR, PermissionConstants.MICROPHONE) }, + { requestCalendarAndRecordAudio() } + )) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + add(CommonItemSwitch( + R.string.permission_write_settings_status, + { PermissionUtils.isGrantedWriteSettings() }, + { requestWriteSettings() } + )) + add(CommonItemSwitch( + R.string.permission_write_settings_status, + { PermissionUtils.isGrantedDrawOverlays() }, + { requestDrawOverlays() } + )) + } } } private fun requestCalendar() { - PermissionUtils.permission(PermissionConstants.CALENDAR) - .rationale { shouldRequest -> DialogHelper.showRationaleDialog(shouldRequest) } + PermissionUtils.permissionGroup(PermissionConstants.CALENDAR) + .rationale { activity, shouldRequest -> PermissionHelper.showRationaleDialog(activity, shouldRequest) } .callback(object : PermissionUtils.FullCallback { override fun onGranted(permissionsGranted: List ) { LogUtils.d(permissionsGranted) - updateAboutPermission() + showSnackbar(true, "Calendar is granted") + itemsView.updateItems(bindItems()) } override fun onDenied(permissionsDeniedForever: List , permissionsDenied: List ) { LogUtils.d(permissionsDeniedForever, permissionsDenied) - if (!permissionsDeniedForever.isEmpty()) { - DialogHelper.showOpenAppSettingDialog() - return + if (permissionsDeniedForever.isNotEmpty()) { + showSnackbar(false, "Calendar is denied forever") + } else { + showSnackbar(false, "Calendar is denied") } - requestCalendar() + itemsView.updateItems(bindItems()) } }) .theme { activity -> ScreenUtils.setFullScreen(activity) } @@ -101,46 +110,45 @@ class PermissionActivity : CommonTitleActivity() { } private fun requestRecordAudio() { - PermissionUtils.permission(PermissionConstants.MICROPHONE) - .rationale { shouldRequest -> DialogHelper.showRationaleDialog(shouldRequest) } + PermissionUtils.permissionGroup(PermissionConstants.MICROPHONE) + .rationale { activity, shouldRequest -> PermissionHelper.showRationaleDialog(activity, shouldRequest) } .callback(object : PermissionUtils.FullCallback { override fun onGranted(permissionsGranted: List ) { LogUtils.d(permissionsGranted) - updateAboutPermission() + showSnackbar(true, "Microphone is granted") + itemsView.updateItems(bindItems()) } override fun onDenied(permissionsDeniedForever: List , permissionsDenied: List ) { LogUtils.d(permissionsDeniedForever, permissionsDenied) - if (!permissionsDeniedForever.isEmpty()) { - DialogHelper.showOpenAppSettingDialog() - return + if (permissionsDeniedForever.isNotEmpty()) { + showSnackbar(false, "Microphone is denied forever") + } else { + showSnackbar(false, "Microphone is denied") } - requestRecordAudio() + itemsView.updateItems(bindItems()) } }) .request() } private fun requestCalendarAndRecordAudio() { - PermissionUtils.permission(PermissionConstants.CALENDAR, PermissionConstants.MICROPHONE) - .rationale { shouldRequest -> DialogHelper.showRationaleDialog(shouldRequest) } - .callback(object : PermissionUtils.FullCallback { - override fun onGranted(permissionsGranted: List ) { - LogUtils.d(permissionsGranted) - updateAboutPermission() + PermissionUtils.permission(permission.READ_CALENDAR, permission.RECORD_AUDIO) + .explain { activity, denied, shouldRequest -> PermissionHelper.showExplainDialog(activity, denied, shouldRequest) } + .callback { isAllGranted, granted, deniedForever, denied -> + LogUtils.d(granted, deniedForever, denied) + itemsView.updateItems(bindItems()) + if (isAllGranted) { + showSnackbar(true, "Calendar and Microphone are granted") + return@callback } - - override fun onDenied(permissionsDeniedForever: List , - permissionsDenied: List ) { - LogUtils.d(permissionsDeniedForever, permissionsDenied) - if (!permissionsDeniedForever.isEmpty()) { - DialogHelper.showOpenAppSettingDialog() - return - } - requestCalendarAndRecordAudio() + if (deniedForever.isNotEmpty()) { + showSnackbar(false, "Calendar or Microphone is denied forever") + } else { + showSnackbar(false, "Calendar or Microphone is denied") } - }) + } .request() } @@ -148,40 +156,44 @@ class PermissionActivity : CommonTitleActivity() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PermissionUtils.requestWriteSettings(object : PermissionUtils.SimpleCallback { override fun onGranted() { - ToastUtils.showLong("Write Settings is Granted") + showSnackbar(true, "Write Settings is granted") + itemsView.updateItems(bindItems()) } override fun onDenied() { - ToastUtils.showLong("Write Settings Denied") + showSnackbar(false, "Write Settings is denied") + itemsView.updateItems(bindItems()) } }) } - } private fun requestDrawOverlays() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PermissionUtils.requestDrawOverlays(object : PermissionUtils.SimpleCallback { override fun onGranted() { - ToastUtils.showLong("Draw Overlays is Granted") + showSnackbar(true, "Draw Overlays is granted") + itemsView.updateItems(bindItems()) } override fun onDenied() { - ToastUtils.showLong("Draw Overlays Denied") + showSnackbar(false, "Draw Overlays is denied") + itemsView.updateItems(bindItems()) } }) } } - private fun updateAboutPermission() { - SpanUtils.with(permissionAboutTv) - .append(permissions).setBold() - .appendLine("READ_CALENDAR: " + PermissionUtils.isGranted(Manifest.permission.READ_CALENDAR)) - .appendLine("RECORD_AUDIO: " + PermissionUtils.isGranted(Manifest.permission.RECORD_AUDIO)) + + private fun showSnackbar(isSuccess: Boolean, msg: String) { + SnackbarUtils.with(mContentView) + .setDuration(SnackbarUtils.LENGTH_LONG) + .setMessage(msg) .apply { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - appendLine("WRITE_SETTINGS: " + PermissionUtils.isGrantedWriteSettings()) - appendLine("DRAW_OVERLAYS: " + PermissionUtils.isGrantedDrawOverlays()) + if (isSuccess) { + showSuccess() + } else { + showError() } } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt index 86097a834a..c9b748cdfa 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt @@ -2,14 +2,16 @@ package com.blankj.utilcode.pkg.feature.phone 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.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.CollectionUtils +import com.blankj.utilcode.util.PermissionUtils import com.blankj.utilcode.util.PhoneUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_phone.* /** * ``` @@ -19,64 +21,42 @@ import kotlinx.android.synthetic.main.activity_phone.* * desc : demo about PhoneUtils * ``` */ -class PhoneActivity : CommonTitleActivity() { +class PhoneActivity : CommonActivity() { companion object { fun start(context: Context) { - PermissionHelper.requestPhoneAndSms(object : PermissionHelper.OnPermissionGrantedListener { - override fun onPermissionGranted() { + PermissionHelper.request(context, object : PermissionUtils.SimpleCallback { + override fun onGranted() { val starter = Intent(context, PhoneActivity::class.java) context.startActivity(starter) } - }, object : PermissionHelper.OnPermissionDeniedListener { - override fun onPermissionDenied() { - start(context) + + override fun onDenied() { } - }) + }, PermissionConstants.PHONE) } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_phone) + override fun bindTitleRes(): Int { + return R.string.demo_phone } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_phone - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - SpanUtils.with(phoneAboutTv) - .appendLine("isPhone: " + PhoneUtils.isPhone()) - .appendLine("getDeviceId: " + PhoneUtils.getDeviceId()) - .appendLine("getSerial: " + PhoneUtils.getSerial()) - .appendLine("getIMEI: " + PhoneUtils.getIMEI()) - .appendLine("getMEID: " + PhoneUtils.getMEID()) - .appendLine("getIMSI: " + PhoneUtils.getIMSI()) - .appendLine("getPhoneType: " + PhoneUtils.getPhoneType()) - .appendLine("isSimCardReady: " + PhoneUtils.isSimCardReady()) - .appendLine("getSimOperatorName: " + PhoneUtils.getSimOperatorName()) - .appendLine("getSimOperatorByMnc: " + PhoneUtils.getSimOperatorByMnc()) - .append("getPhoneStatus: " + PhoneUtils.getPhoneStatus()) - .create() - - applyDebouncingClickListener( - phoneDialBtn, - phoneCallBtn, - phoneSendSmsBtn, - phoneSendSmsSilentBtn + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemTitle("isPhone", PhoneUtils.isPhone().toString()), + CommonItemTitle("getDeviceId", PhoneUtils.getDeviceId()), + CommonItemTitle("getSerial", PhoneUtils.getSerial()), + CommonItemTitle("getIMEI", PhoneUtils.getIMEI()), + CommonItemTitle("getMEID", PhoneUtils.getMEID()), + CommonItemTitle("getIMSI", PhoneUtils.getIMSI()), + CommonItemTitle("getPhoneType", PhoneUtils.getPhoneType().toString()), + CommonItemTitle("isSimCardReady", PhoneUtils.isSimCardReady().toString()), + CommonItemTitle("getSimOperatorName", PhoneUtils.getSimOperatorName()), + CommonItemTitle("getSimOperatorByMnc", PhoneUtils.getSimOperatorByMnc()), + + CommonItemClick(R.string.phone_dial) { PhoneUtils.dial("*10000#haha") }, + CommonItemClick(R.string.phone_call) { PhoneUtils.call("*10000#haha") }, + CommonItemClick(R.string.phone_send_sms) { PhoneUtils.sendSms("10000", "sendSms") } ) } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.phoneDialBtn -> PhoneUtils.dial("10000") - R.id.phoneCallBtn -> PhoneUtils.call("10000") - R.id.phoneSendSmsBtn -> PhoneUtils.sendSms("10000", "sendSms") - R.id.phoneSendSmsSilentBtn -> PhoneUtils.sendSmsSilent("10000", "sendSmsSilent") - } - } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt index d7728d8787..7753d2f47a 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt @@ -2,13 +2,13 @@ package com.blankj.utilcode.pkg.feature.process 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 com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.ProcessUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_process.* /** * ``` @@ -18,7 +18,7 @@ import kotlinx.android.synthetic.main.activity_process.* * desc : demo about ProcessUtils * ``` */ -class ProcessActivity : CommonTitleActivity() { +class ProcessActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -27,54 +27,41 @@ class ProcessActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_process) + override fun bindTitleRes(): Int { + return R.string.demo_process } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_process - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener(processKillAllBackgroundProcesses) + override fun bindItems(): MutableList > { val set = ProcessUtils.getAllBackgroundProcesses() - SpanUtils.with(processAboutTv) - .appendLine("getForegroundProcessName: " + ProcessUtils.getForegroundProcessName()!!) - .appendLine("getAllBackgroundProcesses: " + getSetItems(set)) - .appendLine("size: " + set.size) - .appendLine("isMainProcess: " + ProcessUtils.isMainProcess()) - .append("getCurrentProcessName: " + ProcessUtils.getCurrentProcessName()) - .create() - } - - override fun doBusiness() {} + return CollectionUtils.newArrayList( + CommonItemTitle("getForegroundProcessName", ProcessUtils.getForegroundProcessName()!!), + CommonItemTitle("getAllBackgroundProcesses -> ${set.size}", getSetItems(set)), + CommonItemTitle("isMainProcess", ProcessUtils.isMainProcess().toString()), + CommonItemTitle("getCurrentProcessName", ProcessUtils.getCurrentProcessName()), - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.processKillAllBackgroundProcesses -> { - val bgSet = ProcessUtils.getAllBackgroundProcesses() - val killedSet = ProcessUtils.killAllBackgroundProcesses() - SpanUtils.with(processAboutTv) - .appendLine("getForegroundProcessName: " + ProcessUtils.getForegroundProcessName()) - .appendLine("getAllBackgroundProcesses: " + getSetItems(bgSet)) - .appendLine("size: " + bgSet.size) - .appendLine("killAllBackgroundProcesses: " + getSetItems(killedSet)) - .appendLine("size: " + killedSet.size) - .appendLine("isMainProcess: " + ProcessUtils.isMainProcess()) - .append("getCurrentProcessName: " + ProcessUtils.getCurrentProcessName()) - .create() - } - } + CommonItemClick(R.string.process_kill_all_background).setOnItemClickListener { _, item, _ -> + val bgSet = ProcessUtils.getAllBackgroundProcesses() + val killedSet = ProcessUtils.killAllBackgroundProcesses() + itemsView.updateItems( + CollectionUtils.newArrayList( + CommonItemTitle("getForegroundProcessName", ProcessUtils.getForegroundProcessName()), + CommonItemTitle("getAllBackgroundProcesses -> ${bgSet.size}", getSetItems(bgSet)), + CommonItemTitle("killAllBackgroundProcesses -> ${killedSet.size}", getSetItems(killedSet)), + CommonItemTitle("isMainProcess", ProcessUtils.isMainProcess().toString()), + CommonItemTitle("getCurrentProcessName", ProcessUtils.getCurrentProcessName()), + item + ) + ) + } + ) } private fun getSetItems(set: Set ): String { val iterator = set.iterator() val sb = StringBuilder() while (iterator.hasNext()) { - sb.append(iterator.next()).append("\n") + sb.append("\n").append(iterator.next()) } - return sb.toString() + return if (sb.isNotEmpty()) sb.deleteCharAt(0).toString() else "" } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt index 72a5cc3ee0..f445acf642 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt @@ -2,13 +2,12 @@ package com.blankj.utilcode.pkg.feature.reflect 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.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.ReflectUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_reflect.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_reflect.* * desc : demo about ReflectUtils * ``` */ -class ReflectActivity : CommonTitleActivity() { +class ReflectActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -27,33 +26,16 @@ class ReflectActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_reflect) + override fun bindTitleRes(): Int { + return R.string.demo_reflect } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_reflect - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - SpanUtils.with(reflectAboutTv) - .appendLine("before reflect: " + ReflectUtils.reflect(TestPrivateStaticFinal::class.java).field("I1").get ()) - .append("after reflect: " + ReflectUtils.reflect(TestPrivateStaticFinal::class.java).field("I1", 2).field("I1").get ()) - .create() - } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} - - override fun onDestroy() { - ReflectUtils.reflect(TestPrivateStaticFinal::class.java).field("I1", 1) - super.onDestroy() + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemTitle("source value", TestPrivateStaticFinal.STR), + CommonItemTitle("reflect get", ReflectUtils.reflect(TestPrivateStaticFinal::class.java).field("STR").get ()), + CommonItemTitle("after reflect get", ReflectUtils.reflect(TestPrivateStaticFinal::class.java).field("STR", "reflect success").field("STR").get ()), + CommonItemTitle("source value", TestPrivateStaticFinal.STR) + ) } -} - -object TestPrivateStaticFinal { - val I1 = 1 -} +} \ No newline at end of file diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java new file mode 100644 index 0000000000..b7efb5f4d7 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java @@ -0,0 +1,16 @@ +package com.blankj.utilcode.pkg.feature.reflect; + +import androidx.annotation.Keep; + +/** + * + * author: blankj + * blog : http://blankj.com + * time : 2019/09/09 + * desc : + *+ */ +@Keep +public class TestPrivateStaticFinal { + public static final String STR = "str"; +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt index d36f63e0e0..cf56301068 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt @@ -2,14 +2,14 @@ package com.blankj.utilcode.pkg.feature.resource 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.Config import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.ResourceUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_resource.* /** * ``` @@ -19,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_resource.* * desc : demo about ResourceUtils * ``` */ -class ResourceActivity : CommonTitleActivity() { +class ResourceActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -28,37 +28,22 @@ class ResourceActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_resource) + override fun bindTitleRes(): Int { + return R.string.demo_resource } - override fun initData(bundle: Bundle?) { - - } - - override fun bindLayout(): Int { - return R.layout.activity_resource - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - resourceCopyFileFromAssets, - resourceCopyFileFromRaw + override fun bindItems(): MutableList> { + return CollectionUtils.newArrayList( + CommonItemTitle("readAssets2String", ResourceUtils.readAssets2String("test/test.txt")), + CommonItemTitle("readAssets2List", ResourceUtils.readAssets2List("test/test.txt").toString()), + CommonItemTitle("readRaw2List", ResourceUtils.readRaw2List(R.raw.test).toString()), + + CommonItemClick(R.string.resource_copy_file_from_assets_2_cache) { + ResourceUtils.copyFileFromAssets("test", Config.CACHE_PATH + "assets/test") + }, + CommonItemClick(R.string.resource_copy_file_from_raw_2_cache) { + ResourceUtils.copyFileFromRaw(R.raw.test, Config.CACHE_PATH + "raw/test.txt") + } ) - - SpanUtils.with(resourceAboutTv) - .appendLine("readAssets2String: " + ResourceUtils.readAssets2String("test/test.txt")) - .appendLine("readAssets2List: " + ResourceUtils.readAssets2List("test/test.txt").toString()) - .append("readRaw2List: " + ResourceUtils.readRaw2List(R.raw.test).toString()) - .create() - } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.resourceCopyFileFromAssets -> ResourceUtils.copyFileFromAssets("test", Config.CACHE_PATH + "assets/test") - R.id.resourceCopyFileFromRaw -> ResourceUtils.copyFileFromRaw(R.raw.test, Config.CACHE_PATH + "raw/test.txt") - } } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt index d16af9c250..e2b4a3c7bc 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt @@ -2,13 +2,12 @@ package com.blankj.utilcode.pkg.feature.rom 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.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.RomUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_rom.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_rom.* * desc : demo about RomUtils * ``` */ -class RomActivity : CommonTitleActivity() { +class RomActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -27,23 +26,15 @@ class RomActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_rom) + override fun bindTitleRes(): Int { + return R.string.demo_rom } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_rom - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - SpanUtils.with(romAboutTv) - .append("getRomInfo: " + RomUtils.getRomInfo()) - .create() + override fun bindItems(): MutableList > { + val romInfo = RomUtils.getRomInfo() + return CollectionUtils.newArrayList( + CommonItemTitle("Rom Name", romInfo.name), + CommonItemTitle("Rom Version", romInfo.version) + ) } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt index 5784060a2b..88286c4df5 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt @@ -3,13 +3,16 @@ package com.blankj.utilcode.pkg.feature.screen 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 android.widget.ImageView +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.common.item.CommonItemSwitch +import com.blankj.common.item.CommonItemTitle import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.* -import kotlinx.android.synthetic.main.activity_screen.* /** @@ -20,7 +23,7 @@ import kotlinx.android.synthetic.main.activity_screen.* * desc : demo about RomUtils * ``` */ -class ScreenActivity : CommonTitleActivity() { +class ScreenActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -42,75 +45,57 @@ class ScreenActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_screen) + override fun bindTitleRes(): Int { + return R.string.demo_screen } - override fun initData(bundle: Bundle?) {} + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemTitle("getScreenWidth", ScreenUtils.getScreenWidth().toString()), + CommonItemTitle("getScreenHeight", ScreenUtils.getScreenHeight().toString()), + CommonItemTitle("getAppScreenWidth", ScreenUtils.getAppScreenWidth().toString()), + CommonItemTitle("getAppScreenHeight", ScreenUtils.getAppScreenHeight().toString()), + CommonItemTitle("getScreenDensity", ScreenUtils.getScreenDensity().toString()), + CommonItemTitle("getScreenDensityDpi", ScreenUtils.getScreenDensityDpi().toString()), + CommonItemTitle("getScreenRotation", ScreenUtils.getScreenRotation(this).toString()), + CommonItemTitle("isScreenLock", ScreenUtils.isScreenLock().toString()), + CommonItemTitle("getSleepDuration", ScreenUtils.getSleepDuration().toString()), - override fun bindLayout(): Int { - return R.layout.activity_screen - } + CommonItemSwitch( + "isFullScreen", + { ScreenUtils.isFullScreen(this) }, + { + if (it) { + ScreenUtils.setFullScreen(this) + BarUtils.setStatusBarVisibility(this, false) + } else { + ScreenUtils.setNonFullScreen(this) + BarUtils.setStatusBarVisibility(this, true) + } + } + ), + CommonItemSwitch( + "isLandscape", + { ScreenUtils.isLandscape() }, + { + if (it) { + ScreenUtils.setLandscape(this) + } else { + ScreenUtils.setPortrait(this) + } + } + ), + CommonItemClick(R.string.screen_screenshot) { + val iv :ImageView = ImageView(this) + iv.setImageResource(R.mipmap.ic_launcher) - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - screenFullscreenBtn, - screenNonFullscreenBtn, - screenToggleFullscreenBtn, - screenLandscapeBtn, - screenPortraitBtn, - screenScreenshotBtn, - screenSetSleepDurationBtn - ) - updateAboutScreen(); - } + val tv: TextView = TextView(this) + tv.setText("wowowowwowo") - override fun doBusiness() {} + DialogHelper.showScreenshotDialog(ImageUtils.view2Bitmap(tv)) - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.screenFullscreenBtn -> { - ScreenUtils.setFullScreen(this) - BarUtils.setStatusBarVisibility(this, false) - } - R.id.screenNonFullscreenBtn -> { - ScreenUtils.setNonFullScreen(this) - BarUtils.setStatusBarVisibility(this, true) - } - R.id.screenToggleFullscreenBtn -> { - ScreenUtils.toggleFullScreen(this) - if (ScreenUtils.isFullScreen(this)) { - BarUtils.setStatusBarVisibility(this, false) - } else { - BarUtils.setStatusBarVisibility(this, true) +// DialogHelper.showScreenshotDialog(ScreenUtils.screenShot(this)) } - } - R.id.screenLandscapeBtn -> ScreenUtils.setLandscape(this) - R.id.screenPortraitBtn -> ScreenUtils.setPortrait(this) - R.id.screenScreenshotBtn -> DialogHelper.showScreenshotDialog(ScreenUtils.screenShot(this)) - R.id.screenSetSleepDurationBtn -> ScreenUtils.setSleepDuration(100000) - } - Utils.runOnUiThreadDelayed(object : Runnable { - override fun run() { - updateAboutScreen() - } - }, 36) - } - - private fun updateAboutScreen() { - SpanUtils.with(screenAboutTv) - .appendLine("getScreenWidth: " + ScreenUtils.getScreenWidth()) - .appendLine("getScreenHeight: " + ScreenUtils.getScreenHeight()) - .appendLine("getAppScreenWidth: " + ScreenUtils.getAppScreenWidth()) - .appendLine("getAppScreenHeight: " + ScreenUtils.getAppScreenHeight()) - .appendLine("getScreenDensity: " + ScreenUtils.getScreenDensity()) - .appendLine("getScreenDensityDpi: " + ScreenUtils.getScreenDensityDpi()) - .appendLine("isFullScreen: " + ScreenUtils.isFullScreen(this)) - .appendLine("isLandscape: " + ScreenUtils.isLandscape()) - .appendLine("isPortrait: " + ScreenUtils.isPortrait()) - .appendLine("getScreenRotation: " + ScreenUtils.getScreenRotation(this)) - .appendLine("isScreenLock: " + ScreenUtils.isScreenLock()) - .append("getSleepDuration: " + ScreenUtils.getSleepDuration()) - .create() + ) } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt index a659bfff50..0c51475952 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt @@ -2,13 +2,13 @@ package com.blankj.utilcode.pkg.feature.sdcard 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.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.ConvertUtils import com.blankj.utilcode.util.SDCardUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_sdcard.* /** * ``` @@ -18,7 +18,7 @@ import kotlinx.android.synthetic.main.activity_sdcard.* * desc : demo about SDCardUtils * ``` */ -class SDCardActivity : CommonTitleActivity() { +class SDCardActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -27,25 +27,20 @@ class SDCardActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_sdcard) + override fun bindTitleRes(): Int { + return R.string.demo_sdcard } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_sdcard - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - SpanUtils.with(sdcardAboutTv) - .appendLine("isSDCardEnableByEnvironment: " + SDCardUtils.isSDCardEnableByEnvironment()) - .appendLine("getSDCardPathByEnvironment: " + SDCardUtils.getSDCardPathByEnvironment()) - .appendLine("getSDCardInfo: " + SDCardUtils.getSDCardInfo()) - .create() + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemTitle("isSDCardEnableByEnvironment", SDCardUtils.isSDCardEnableByEnvironment().toString()), + CommonItemTitle("getSDCardPathByEnvironment", SDCardUtils.getSDCardPathByEnvironment()), + CommonItemTitle("getSDCardInfo", SDCardUtils.getSDCardInfo().toString()), + CommonItemTitle("getMountedSDCardPath", SDCardUtils.getMountedSDCardPath().toString()), + CommonItemTitle("getExternalTotalSize", ConvertUtils.byte2FitMemorySize(SDCardUtils.getExternalTotalSize(), 2)), + CommonItemTitle("getExternalAvailableSize", ConvertUtils.byte2FitMemorySize(SDCardUtils.getExternalAvailableSize(), 2)), + CommonItemTitle("getInternalTotalSize", ConvertUtils.byte2FitMemorySize(SDCardUtils.getInternalTotalSize(), 2)), + CommonItemTitle("getInternalAvailableSize", ConvertUtils.byte2FitMemorySize(SDCardUtils.getInternalAvailableSize(), 2)) + ) } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/shadow/ShadowActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/shadow/ShadowActivity.kt new file mode 100644 index 0000000000..2ec21ad483 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/shadow/ShadowActivity.kt @@ -0,0 +1,52 @@ +package com.blankj.utilcode.pkg.feature.shadow + +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import android.view.View +import com.blankj.common.activity.CommonActivity +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.ShadowUtils +import com.blankj.utilcode.util.ShadowUtils.Config +import com.blankj.utilcode.util.SizeUtils +import kotlinx.android.synthetic.main.shadow_activity.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2019/10/22 + * desc : demo about ShadowUtils + * ``` + */ +class ShadowActivity : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, ShadowActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitleRes(): Int { + return R.string.demo_shadow + } + + override fun bindLayout(): Int { + return R.layout.shadow_activity + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + ShadowUtils.apply(shadowRectView, Config().setShadowColor(0x44000000, 0x55000000)) + ShadowUtils.apply(shadowRoundRectView, Config().setShadowColor(0x44000000, 0x55000000).setShadowRadius( + SizeUtils.dp2px(16f).toFloat())) + ShadowUtils.apply(shadowCircleView, Config().setCircle().setShadowColor(0x44000000, 0x55000000)) + + ShadowUtils.apply(shadowRectView1, Config().setShadowColor(0x44000000, 0x55000000)) + ShadowUtils.apply(shadowRoundRectView1, Config().setShadowColor(0x44000000, 0x55000000).setShadowRadius( + SizeUtils.dp2px(16f).toFloat())) + ShadowUtils.apply(shadowCircleView1, Config().setCircle().setShadowColor(0x44000000, 0x55000000)) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt index dc30beba44..dcde367a5b 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt @@ -3,19 +3,18 @@ package com.blankj.utilcode.pkg.feature.snackbar import android.content.Context import android.content.Intent import android.graphics.Color -import android.os.Bundle -import android.support.annotation.StringRes import android.text.SpannableStringBuilder -import android.view.View import android.view.ViewGroup import android.widget.TextView -import com.blankj.common.CommonTitleActivity - +import androidx.annotation.StringRes +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.CollectionUtils import com.blankj.utilcode.util.SnackbarUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_snackbar.* /** * ``` @@ -25,7 +24,7 @@ import kotlinx.android.synthetic.main.activity_snackbar.* * desc : demo about SnackbarUtils * ``` */ -class SnackbarActivity : CommonTitleActivity() { +class SnackbarActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -34,114 +33,120 @@ class SnackbarActivity : CommonTitleActivity() { } } - private lateinit var snackBarRootView: View - - override fun bindTitle(): CharSequence { - return getString(R.string.demo_snackbar) - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_snackbar - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - snackBarRootView = findViewById(android.R.id.content) - applyDebouncingClickListener( - snackbarShowShortBtn, - snackbarShowShortWithActionBtn, - snackbarShowLongBtn, - snackbarShowLongWithActionBtn, - snackbarShowIndefiniteBtn, - snackbarShowIndefiniteWithActionBtn, - snackbarAddViewBtn, - snackbarAddViewWithActionBtn, - snackbarShowSuccessBtn, - snackbarShowWarningBtn, - snackbarShowErrorBtn, - snackbarDismissBtn - ) + override fun bindTitleRes(): Int { + return R.string.demo_snackbar } - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.snackbarShowShortBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_short)) - .setMessageColor(Color.WHITE) - .setBgResource(R.drawable.snackbar_custom_bg) - .show() - R.id.snackbarShowShortWithActionBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_short)) - .setMessageColor(Color.WHITE) - .setBgResource(R.drawable.snackbar_custom_bg) - .setAction(getString(R.string.snackbar_click), Color.YELLOW) { ToastUtils.showShort(getString(R.string.snackbar_click)) } - .show() - R.id.snackbarShowLongBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_long)) - .setMessageColor(Color.WHITE) - .setDuration(SnackbarUtils.LENGTH_LONG) - .setBgResource(R.drawable.snackbar_custom_bg) - .show() - R.id.snackbarShowLongWithActionBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_long)) - .setMessageColor(Color.WHITE) - .setBgResource(R.drawable.snackbar_custom_bg) - .setDuration(SnackbarUtils.LENGTH_LONG) - .setAction(getString(R.string.snackbar_click), Color.YELLOW) { ToastUtils.showShort(getString(R.string.snackbar_click)) } - .show() - R.id.snackbarShowIndefiniteBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_indefinite)) - .setMessageColor(Color.WHITE) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .setBgResource(R.drawable.snackbar_custom_bg) - .show() - R.id.snackbarShowIndefiniteWithActionBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_indefinite)) - .setMessageColor(Color.WHITE) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .setBgResource(R.drawable.snackbar_custom_bg) - .setAction(getString(R.string.snackbar_click), Color.YELLOW) { ToastUtils.showShort(getString(R.string.snackbar_click)) } - .show() - R.id.snackbarAddViewBtn -> { - val params = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) - SnackbarUtils.with(snackBarRootView) - .setBgColor(Color.TRANSPARENT) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .show() - SnackbarUtils.addView(R.layout.snackbar_custom, params) - - } - R.id.snackbarAddViewWithActionBtn -> { - val params: ViewGroup.LayoutParams = ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ) - SnackbarUtils.with(snackBarRootView) - .setBgColor(Color.TRANSPARENT) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .show() - SnackbarUtils.addView(R.layout.snackbar_custom, params) - val snackbarView = SnackbarUtils.getView() - if (snackbarView != null) { - val tvSnackbarCustom = snackbarView.findViewById (R.id.snackbarCustomTv) - tvSnackbarCustom.setText(R.string.snackbar_click_to_dismiss) - snackbarView.setOnClickListener { SnackbarUtils.dismiss() } + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemClick(R.string.snackbar_short) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_short)) + .setMessageColor(Color.WHITE) + .setBgResource(R.drawable.snackbar_custom_bg) + .show() + }, + CommonItemClick(R.string.snackbar_short_top) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_short_top)) + .setMessageColor(Color.WHITE) + .setBgResource(R.drawable.snackbar_custom_bg) + .show(true) + }, + CommonItemClick(R.string.snackbar_short_with_action) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_short_with_action)) + .setMessageColor(Color.WHITE) + .setBgResource(R.drawable.snackbar_custom_bg) + .setAction(getString(R.string.snackbar_click), Color.YELLOW) { ToastUtils.showShort(getString(R.string.snackbar_click)) } + .show() + }, + CommonItemClick(R.string.snackbar_short_with_action_top) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_short_with_action_top)) + .setMessageColor(Color.WHITE) + .setBgResource(R.drawable.snackbar_custom_bg) + .setAction(getString(R.string.snackbar_click), Color.YELLOW) { ToastUtils.showShort(getString(R.string.snackbar_click)) } + .show(true) + }, + CommonItemClick(R.string.snackbar_long) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_long)) + .setMessageColor(Color.WHITE) + .setDuration(SnackbarUtils.LENGTH_LONG) + .setBgResource(R.drawable.snackbar_custom_bg) + .show() + }, + CommonItemClick(R.string.snackbar_long_with_action) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_long_with_action)) + .setMessageColor(Color.WHITE) + .setBgResource(R.drawable.snackbar_custom_bg) + .setDuration(SnackbarUtils.LENGTH_LONG) + .setAction(getString(R.string.snackbar_click), Color.YELLOW) { ToastUtils.showShort(getString(R.string.snackbar_click)) } + .show() + }, + CommonItemClick(R.string.snackbar_indefinite) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_indefinite)) + .setMessageColor(Color.WHITE) + .setDuration(SnackbarUtils.LENGTH_INDEFINITE) + .setBgResource(R.drawable.snackbar_custom_bg) + .show() + }, + CommonItemClick(R.string.snackbar_indefinite_with_action) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_indefinite_with_action)) + .setMessageColor(Color.WHITE) + .setDuration(SnackbarUtils.LENGTH_INDEFINITE) + .setBgResource(R.drawable.snackbar_custom_bg) + .setAction(getString(R.string.snackbar_click), Color.YELLOW) { ToastUtils.showShort(getString(R.string.snackbar_click)) } + .show() + }, + CommonItemClick(R.string.snackbar_add_view) { + val params = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + SnackbarUtils.with(mContentView) + .setBgColor(Color.TRANSPARENT) + .setDuration(SnackbarUtils.LENGTH_INDEFINITE) + .show() + SnackbarUtils.addView(R.layout.snackbar_custom, params) + }, + CommonItemClick(R.string.snackbar_add_view_with_action) { + val params: ViewGroup.LayoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + SnackbarUtils.with(mContentView) + .setBgColor(Color.TRANSPARENT) + .setDuration(SnackbarUtils.LENGTH_INDEFINITE) + .show() + SnackbarUtils.addView(R.layout.snackbar_custom, params) + val snackbarView = SnackbarUtils.getView() + if (snackbarView != null) { + val tvSnackbarCustom = snackbarView.findViewById (R.id.snackbarCustomTv) + tvSnackbarCustom.setText(R.string.snackbar_click_to_dismiss) + snackbarView.setOnClickListener { SnackbarUtils.dismiss() } + } + }, + CommonItemClick(R.string.snackbar_success) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_success)) + .showSuccess() + }, + CommonItemClick(R.string.snackbar_warning) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_warning)) + .showWarning() + }, + CommonItemClick(R.string.snackbar_error) { + SnackbarUtils.with(mContentView) + .setMessage(getMsg(R.string.snackbar_error)) + .showError() + }, + CommonItemClick(R.string.snackbar_dismiss) { + SnackbarUtils.dismiss() } - } - R.id.snackbarShowSuccessBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_success)) - .showSuccess() - R.id.snackbarShowWarningBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_warning)) - .showWarning() - R.id.snackbarShowErrorBtn -> SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_error)) - .showError() - R.id.snackbarDismissBtn -> SnackbarUtils.dismiss() - } + ) } private fun getMsg(@StringRes resId: Int): SpannableStringBuilder { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt index 85b0f6f7be..f0e6abf871 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt @@ -2,12 +2,13 @@ package com.blankj.utilcode.pkg.feature.spStatic 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 com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.SPStaticUtils -import kotlinx.android.synthetic.main.activity_spstatic.* /** * ``` @@ -17,65 +18,65 @@ import kotlinx.android.synthetic.main.activity_spstatic.* * desc : demo about SPUtils * ``` */ -class SPStaticActivity : CommonTitleActivity() { +class SPStaticActivity : CommonActivity() { companion object { fun start(context: Context) { val starter = Intent(context, SPStaticActivity::class.java) context.startActivity(starter) } - - fun sp2String(): String { - val sb = StringBuilder() - val map = SPStaticUtils.getAll() - for ((key, value) in map) { - sb.append(key) - .append(": ") - .append(value) - .append("\n") - } - return sb.toString() - } - } - - override fun bindTitle(): CharSequence { - return getString(R.string.demo_spStatic) } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_spstatic + override fun bindTitleRes(): Int { + return R.string.demo_spStatic } - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - spStaticPutStringBtn, - spStaticPutIntBtn, - spStaticPutLongBtn, - spPutFloatBtn, - spStaticPutBooleanBtn, - spStaticClearBtn + override fun bindItems(): MutableList > { + val itemTitle = CommonItemTitle(sp2String(), true) + return CollectionUtils.newArrayList( + itemTitle, + CommonItemClick(R.string.sp_put_string) { + SPStaticUtils.put("STRING", "string") + itemTitle.title = sp2String() + }, + CommonItemClick(R.string.sp_put_int) { + SPStaticUtils.put("INT", 21) + itemTitle.title = sp2String() + }, + CommonItemClick(R.string.sp_put_long) { + SPStaticUtils.put("LONG", java.lang.Long.MAX_VALUE) + itemTitle.title = sp2String() + }, + CommonItemClick(R.string.sp_put_float) { + SPStaticUtils.put("FLOAT", Math.PI.toFloat()) + itemTitle.title = sp2String() + }, + CommonItemClick(R.string.sp_put_boolean) { + SPStaticUtils.put("BOOLEAN", true) + itemTitle.title = sp2String() + }, + CommonItemClick(R.string.sp_put_string_set) { + SPStaticUtils.put("SET", setOf("1", "2")) + itemTitle.title = sp2String() + }, + CommonItemClick(R.string.sp_clear) { + SPStaticUtils.clear() + itemTitle.title = sp2String() + } ) } - override fun doBusiness() { - updateAboutSp() - } + private fun sp2String(): String { + val sb = StringBuilder() + val map = SPStaticUtils.getAll() + if (map.isEmpty()) return "" + for ((key, value) in map) { + sb.append("\n") + .append(key) + .append(": ") + .append(value) - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.spStaticPutStringBtn -> SPStaticUtils.put("STRING", "string") - R.id.spStaticPutIntBtn -> SPStaticUtils.put("INT", 21) - R.id.spStaticPutLongBtn -> SPStaticUtils.put("LONG", java.lang.Long.MAX_VALUE) - R.id.spPutFloatBtn -> SPStaticUtils.put("FLOAT", Math.PI.toFloat()) - R.id.spStaticPutBooleanBtn -> SPStaticUtils.put("BOOLEAN", true) - R.id.spStaticClearBtn -> SPStaticUtils.clear() } - updateAboutSp() - } - - private fun updateAboutSp() { - spStaticAboutTv.text = sp2String() + return sb.deleteCharAt(0).toString() } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt index 52b4abdc70..84c9f868bb 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt @@ -5,7 +5,6 @@ import android.content.Context import android.content.Intent import android.graphics.* import android.os.Bundle -import android.support.annotation.ColorInt import android.text.Layout import android.text.SpannableStringBuilder import android.text.TextPaint @@ -14,11 +13,12 @@ import android.text.style.ClickableSpan import android.text.style.UpdateAppearance import android.view.View import android.view.animation.LinearInterpolator -import com.blankj.common.CommonTitleActivity +import androidx.annotation.ColorInt +import com.blankj.common.activity.CommonActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_span.* +import kotlinx.android.synthetic.main.span_activity.* /** * ``` @@ -28,7 +28,7 @@ import kotlinx.android.synthetic.main.activity_span.* * desc : demo about SpanUtils * ``` */ -class SpanActivity : CommonTitleActivity() { +class SpanActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -51,21 +51,18 @@ class SpanActivity : CommonTitleActivity() { private lateinit var mForegroundAlphaColorSpan: ForegroundAlphaColorSpan private lateinit var mForegroundAlphaColorSpanGroup: ForegroundAlphaColorSpanGroup private lateinit var mPrinterString: String - internal var density: Float = 0f + private var density: Float = 0f - override fun bindTitle(): CharSequence { - return getString(R.string.demo_span) + override fun bindTitleRes(): Int { + return R.string.demo_span } - override fun initData(bundle: Bundle?) {} - override fun bindLayout(): Int { - return R.layout.activity_span + return R.layout.span_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { - setTitle(R.string.demo_span) - + super.initView(savedInstanceState, contentView) val clickableSpan = object : ClickableSpan() { override fun onClick(widget: View) { ToastUtils.showShort("事件触发了") @@ -81,12 +78,10 @@ class SpanActivity : CommonTitleActivity() { textSize = spanAboutTv.textSize density = resources.displayMetrics.density - // initAnimSpan(); - // startAnim(); - SpanUtils.with(spanAboutTv) .appendLine("SpanUtils").setBackgroundColor(Color.LTGRAY).setBold().setForegroundColor(Color.YELLOW).setHorizontalAlign(Layout.Alignment.ALIGN_CENTER) .appendLine("前景色").setForegroundColor(Color.GREEN) +// .appendLine("测试哈哈").setForegroundColor(Color.RED).setBackgroundColor(Color.LTGRAY).setFontSize(10).setLineHeight(280, SpanUtils.ALIGN_BOTTOM) .appendLine("背景色").setBackgroundColor(Color.LTGRAY) .appendLine("行高居中对齐").setLineHeight(2 * lineHeight, SpanUtils.ALIGN_CENTER).setBackgroundColor(Color.LTGRAY) .appendLine("行高底部对齐").setLineHeight(2 * lineHeight, SpanUtils.ALIGN_BOTTOM).setBackgroundColor(Color.GREEN) @@ -116,38 +111,40 @@ class SpanActivity : CommonTitleActivity() { .appendLine("阴影效果").setFontSize(64, true).setBackgroundColor(Color.BLACK).setShadow(24f, 8f, 8f, Color.WHITE) .append("小图").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_low, SpanUtils.ALIGN_TOP) + .appendImage(R.drawable.span_block_low, SpanUtils.ALIGN_TOP) .append("顶部").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_low, SpanUtils.ALIGN_CENTER) + .appendImage(R.drawable.span_block_low, SpanUtils.ALIGN_CENTER) .append("居中").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_low, SpanUtils.ALIGN_BASELINE) + .appendImage(R.drawable.span_block_low, SpanUtils.ALIGN_BASELINE) .append("底部").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_low, SpanUtils.ALIGN_BOTTOM) + .appendImage(R.drawable.span_block_low, SpanUtils.ALIGN_BOTTOM) .appendLine("对齐").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_TOP) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_TOP) .append("大图").setBackgroundColor(Color.LTGRAY) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_TOP) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_TOP) .append("顶部").setBackgroundColor(Color.LTGRAY) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_TOP) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_TOP) .appendLine("对齐").setBackgroundColor(Color.LTGRAY) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_CENTER) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_CENTER) .append("大图").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_CENTER) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_CENTER) .append("居中").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_CENTER) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_CENTER) .appendLine("对齐").setBackgroundColor(Color.GREEN) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_BOTTOM) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_BOTTOM) .append("大图").setBackgroundColor(Color.LTGRAY) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_BOTTOM) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_BOTTOM) .append("底部").setBackgroundColor(Color.LTGRAY) - .appendImage(R.drawable.span_shape_block_high, SpanUtils.ALIGN_BOTTOM) + .appendImage(R.drawable.span_block_high, SpanUtils.ALIGN_BOTTOM) .appendLine("对齐").setBackgroundColor(Color.LTGRAY) .append("测试空格").appendSpace(30, Color.LTGRAY).appendSpace(50, Color.GREEN).appendSpace(100).appendSpace(30, Color.LTGRAY).appendSpace(50, Color.GREEN) .create() + // initAnimSpan(); + // startAnim(); } private fun initAnimSpan() { @@ -205,7 +202,7 @@ class SpanActivity : CommonTitleActivity() { // printer mForegroundAlphaColorSpanGroup.alpha = animation.animatedValue as Float - // update + // showMsg spanAboutAnimTv.text = animSsb } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt index 314ba33d59..f0b6876ad4 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt @@ -1,14 +1,11 @@ package com.blankj.utilcode.pkg.feature.toast -import android.os.Handler -import android.os.Looper -import android.support.annotation.StringRes import android.widget.TextView -import android.widget.Toast - +import androidx.annotation.StringRes import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.StringUtils import com.blankj.utilcode.util.ToastUtils -import com.blankj.utilcode.util.Utils +import com.blankj.utilcode.util.ViewUtils /** * ``` @@ -20,62 +17,42 @@ import com.blankj.utilcode.util.Utils */ object CustomToast { - private val HANDLER = Handler(Looper.getMainLooper()) - fun showShort(text: CharSequence) { - showReal(text, Toast.LENGTH_SHORT) + show(text, false) } fun showShort(@StringRes resId: Int) { - show(resId, Toast.LENGTH_SHORT) + show(StringUtils.getString(resId), false) } fun showShort(@StringRes resId: Int, vararg args: Any) { - show(resId, Toast.LENGTH_SHORT, *args) + show(StringUtils.getString(resId, args), false) } fun showShort(format: String, vararg args: Any) { - show(format, Toast.LENGTH_SHORT, *args) + show(StringUtils.format(format, args), false) } fun showLong(text: CharSequence) { - showReal(text, Toast.LENGTH_LONG) + show(text, true) } fun showLong(@StringRes resId: Int) { - show(resId, Toast.LENGTH_LONG) + show(StringUtils.getString(resId), true) } fun showLong(@StringRes resId: Int, vararg args: Any) { - show(resId, Toast.LENGTH_LONG, *args) + show(StringUtils.getString(resId, args), true) } fun showLong(format: String, vararg args: Any) { - show(format, Toast.LENGTH_LONG, *args) - } - - private fun show(@StringRes resId: Int, duration: Int) { - show(Utils.getApp().resources.getString(resId), duration) - } - - private fun show(@StringRes resId: Int, duration: Int, vararg args: Any) { - show(String.format(Utils.getApp().resources.getString(resId), *args), duration) - } - - private fun show(format: String, duration: Int, vararg args: Any) { - showReal(String.format(format, *args), duration) + show(StringUtils.format(format, args), true) } - private fun showReal(text: CharSequence, duration: Int) { - HANDLER.post { - val toastView: TextView - if (duration == Toast.LENGTH_SHORT) { - toastView = ToastUtils.showCustomShort(R.layout.toast_custom) as TextView - } else { - toastView = ToastUtils.showCustomLong(R.layout.toast_custom) as TextView - } - toastView.text = text - } + private fun show(text: CharSequence, isLong: Boolean) { + val textView = ViewUtils.layoutId2View(R.layout.toast_custom) as TextView + textView.text = text + ToastUtils.make().setDurationIsLong(isLong).show(textView) } fun cancel() { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt index 113f88662b..f4267ad3a9 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt @@ -3,16 +3,17 @@ package com.blankj.utilcode.pkg.feature.toast import android.content.Context import android.content.Intent import android.graphics.Color -import android.os.Bundle -import android.support.v4.content.ContextCompat import android.view.Gravity -import android.view.View -import com.blankj.common.CommonTitleActivity +import androidx.core.content.ContextCompat +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.helper.DialogHelper +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.ColorUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_toast.* /** * ``` @@ -22,7 +23,7 @@ import kotlinx.android.synthetic.main.activity_toast.* * desc : demo about ToastUtils * ``` */ -class ToastActivity : CommonTitleActivity() { +class ToastActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -31,77 +32,70 @@ class ToastActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_toast) + override fun bindTitleRes(): Int { + return R.string.demo_toast } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_toast - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - toastShowShortBtn, - toastShowLongBtn, - toastShowGreenFontBtn, - toastShowBgColorBtn, - toastShowBgResourceBtn, - toastShowSpanBtn, - toastShowCustomViewBtn, - toastShowMiddleBtn, - toastCancelBtn, - toastShowToastDialogBtn + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemClick(R.string.toast_show_short) { + Thread(Runnable { ToastUtils.showShort(R.string.toast_short) }).start() + }, + CommonItemClick(R.string.toast_show_long) { + Thread(Runnable { ToastUtils.showLong(R.string.toast_long) }).start() + }, + CommonItemClick(R.string.toast_show_null) { + ToastUtils.showLong(null) + }, + CommonItemClick(R.string.toast_show_empty) { + ToastUtils.showLong("") + }, + CommonItemClick(R.string.toast_show_span) { + ToastUtils.showLong( + SpanUtils() + .appendImage(R.mipmap.ic_launcher, SpanUtils.ALIGN_CENTER) + .appendSpace(32) + .append(getString(R.string.toast_span)).setFontSize(24, true) + .create() + ) + }, + CommonItemClick(R.string.toast_show_long_string) { + ToastUtils.showLong(R.string.toast_long_string) + }, + CommonItemClick(R.string.toast_show_green_font) { + ToastUtils.make().setTextColor(Color.GREEN).setDurationIsLong(true).show(R.string.toast_green_font) + }, + CommonItemClick(R.string.toast_show_bg_color) { + ToastUtils.make().setBgColor(ColorUtils.getColor(R.color.colorAccent)).show(R.string.toast_bg_color) + }, + CommonItemClick(R.string.toast_show_bg_resource) { + ToastUtils.make().setBgResource(R.drawable.toast_round_rect).show(R.string.toast_custom_bg) + }, + CommonItemClick(R.string.toast_show_left_icon) { + ToastUtils.make().setLeftIcon(R.mipmap.ic_launcher).show(R.string.toast_show_left_icon) + }, + CommonItemClick(R.string.toast_show_dark_mode) { + ToastUtils.make().setTopIcon(R.mipmap.ic_launcher).setMode(ToastUtils.MODE.DARK).show(R.string.toast_show_dark_mode) + }, + CommonItemClick(R.string.toast_show_middle) { + ToastUtils.make().setGravity(Gravity.CENTER, 0, 0).show(R.string.toast_middle) + }, + CommonItemClick(R.string.toast_show_top) { + ToastUtils.make().setGravity(Gravity.TOP or Gravity.CENTER_HORIZONTAL, 0, 0).show(R.string.toast_top) + }, + CommonItemClick(R.string.toast_show_custom_view) { + Thread(Runnable { CustomToast.showLong(R.string.toast_custom_view) }).start() + }, + CommonItemClick(R.string.toast_cancel) { + ToastUtils.cancel() + }, + CommonItemClick(R.string.toast_show_toast_dialog) { + DialogHelper.showToastDialog() + }, + CommonItemClick(R.string.toast_show_toast_when_start_activity) { + ToastUtils.showLong(R.string.toast_show_toast_when_start_activity) + start(this) + } ) } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - resetToast() - when (view.id) { - R.id.toastShowShortBtn -> Thread(Runnable { ToastUtils.showShort(R.string.toast_short) }).start() - R.id.toastShowLongBtn -> Thread(Runnable { ToastUtils.showLong(R.string.toast_long) }).start() - R.id.toastShowGreenFontBtn -> { - ToastUtils.setMsgColor(Color.GREEN) - ToastUtils.showLong(R.string.toast_green_font) - } - R.id.toastShowBgColorBtn -> { - ToastUtils.setBgColor(ContextCompat.getColor(this, R.color.colorAccent)) - ToastUtils.showLong(R.string.toast_bg_color) - } - R.id.toastShowBgResourceBtn -> { - ToastUtils.setBgResource(R.drawable.toast_shape_round_rect) - ToastUtils.showLong(R.string.toast_custom_bg) - } - R.id.toastShowSpanBtn -> ToastUtils.showLong( - SpanUtils() - .appendImage(R.mipmap.ic_launcher, SpanUtils.ALIGN_CENTER) - .appendSpace(32) - .append(getString(R.string.toast_span)).setFontSize(24, true) - .create() - ) - R.id.toastShowCustomViewBtn -> Thread(Runnable { CustomToast.showLong(R.string.toast_custom_view) }).start() - R.id.toastShowMiddleBtn -> { - ToastUtils.setGravity(Gravity.CENTER, 0, 0) - ToastUtils.showLong(R.string.toast_middle) - - } - R.id.toastCancelBtn -> ToastUtils.cancel() - R.id.toastShowToastDialogBtn -> DialogHelper.showToastDialog() - } - } - - override fun onDestroy() { - resetToast() - super.onDestroy() - } - - private fun resetToast() { - ToastUtils.setMsgColor(-0x1000001) - ToastUtils.setBgColor(-0x1000001) - ToastUtils.setBgResource(-1) - ToastUtils.setGravity(Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, 0, resources.getDimensionPixelSize(R.dimen.offset_64)) - } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/uiMessage/UiMessageActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/uiMessage/UiMessageActivity.kt new file mode 100644 index 0000000000..a486645654 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/uiMessage/UiMessageActivity.kt @@ -0,0 +1,78 @@ +package com.blankj.utilcode.pkg.feature.uiMessage + +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.CommonItemTitle +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.UiMessageUtils + + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2020/04/14 + * desc : demo about UiMessageUtils + * ``` + */ +class UiMessageActivity : CommonActivity(), UiMessageUtils.UiMessageCallback { + + private val titleItem: CommonItemTitle = CommonItemTitle("", true); + private var sendContent: String = "" + + companion object { + fun start(context: Context) { + val starter = Intent(context, UiMessageActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitleRes(): Int { + return R.string.demo_uiMessage + } + + override fun bindItems(): List > { + return CollectionUtils.newArrayList( + titleItem, + CommonItemClick(R.string.uiMessage_add_listener_id) { + UiMessageUtils.getInstance().addListener(R.id.utilCodeUiMessageAddListenerId, this) + }, + CommonItemClick(R.string.uiMessage_remove_all_id) { + UiMessageUtils.getInstance().removeListeners(R.id.utilCodeUiMessageAddListenerId) + }, + CommonItemClick(R.string.uiMessage_add_listener) { + UiMessageUtils.getInstance().addListener(this) + }, + CommonItemClick(R.string.uiMessage_remove_listener) { + UiMessageUtils.getInstance().removeListener(this) + }, + CommonItemClick(R.string.uiMessage_send) { + sendContent = "send: UiMessageActivity#${UiMessageActivity.hashCode()}" + titleItem.title = "" + UiMessageUtils.getInstance().send(R.id.utilCodeUiMessageAddListenerId, UiMessageActivity) + } + ) + } + + override fun handleMessage(localMessage: UiMessageUtils.UiMessage) { + if (localMessage.id == R.id.utilCodeUiMessageAddListenerId) { + var content: String = sendContent + content += "\nreceive: UiMessageActivity#${localMessage.getObject().hashCode()}" + titleItem.title = if (titleItem.title.toString().isEmpty()) { + content + } else { + titleItem.title.toString() + "\n" + content + } + } + } + + override fun onDestroy() { + super.onDestroy() + UiMessageUtils.getInstance().removeListeners(R.id.utilCodeUiMessageAddListenerId) + UiMessageUtils.getInstance().removeListener(this) + } +} \ No newline at end of file diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt index 7a1ea78027..5dc337bc5b 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt @@ -2,12 +2,12 @@ package com.blankj.utilcode.pkg.feature.vibrate 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.util.CollectionUtils import com.blankj.utilcode.util.VibrateUtils -import kotlinx.android.synthetic.main.activity_vibrate.* /** * ``` @@ -17,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_vibrate.* * desc : demo about VibrateUtils * ``` */ -class VibrateActivity : CommonTitleActivity() { +class VibrateActivity : CommonActivity() { companion object { fun start(context: Context) { @@ -26,30 +26,41 @@ class VibrateActivity : CommonTitleActivity() { } } - override fun bindTitle(): CharSequence { - return getString(R.string.demo_vibrate) + override fun bindTitleRes(): Int { + return R.string.demo_vibrate } - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_vibrate + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + CommonItemClick(R.string.vibrate_1000ms) { + VibrateUtils.vibrate(1000) + }, + CommonItemClick(R.string.vibrate_custom) { + VibrateUtils.vibrate(longArrayOf(0, 1000, 1000, 2000, 2000, 1000), 1) + }, + CommonItemClick(R.string.vibrate_background) { + backHome() + mContentView.postDelayed({ +// VibrateUtils.vibrate(1000) -- can not vibrate in background + VibrateUtils.vibrateCompat(longArrayOf(0, 1000, 1000, 2000, 2000, 1000), 1) +// VibrateUtils.vibrateCompat(1000) + }, 1000) + }, + CommonItemClick(R.string.vibrate_cancel) { + VibrateUtils.cancel() + } + ) } - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - vibrate1000msBtn.setOnClickListener { VibrateUtils.vibrate(1000) } - vibrateCustomBtn.setOnClickListener { - VibrateUtils.vibrate(longArrayOf(0, 1000, 1000, 2000, 2000, 1000), 1) - } - vibrateCancelBtn.setOnClickListener { VibrateUtils.cancel() } - } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} - override fun onDestroy() { super.onDestroy() VibrateUtils.cancel() } + + private fun backHome() { + val intent = Intent(Intent.ACTION_MAIN).apply { + addCategory(Intent.CATEGORY_HOME) + } + startActivity(intent) + } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/volume/VolumeActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/volume/VolumeActivity.kt new file mode 100644 index 0000000000..26d67dda07 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/volume/VolumeActivity.kt @@ -0,0 +1,63 @@ +package com.blankj.utilcode.pkg.feature.volume + +import android.content.Context +import android.content.Intent +import android.media.AudioManager +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.CollectionUtils +import com.blankj.utilcode.util.VolumeUtils + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2018/12/29 + * desc : demo about VibrateUtils + * ``` + */ +class VolumeActivity : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, VolumeActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitleRes(): Int { + return R.string.demo_volume + } + + override fun bindItems(): MutableList > { + return CollectionUtils.newArrayList( + getItemSeekBar("Voice Call", AudioManager.STREAM_VOICE_CALL), + getItemSeekBar("System", AudioManager.STREAM_SYSTEM), + getItemSeekBar("Music", AudioManager.STREAM_MUSIC), + getItemSeekBar("Ring", AudioManager.STREAM_RING), + getItemSeekBar("Alarm", AudioManager.STREAM_ALARM), + getItemSeekBar("Notification", AudioManager.STREAM_NOTIFICATION), + getItemSeekBar("Dtmf", AudioManager.STREAM_DTMF) + ) + } + + private fun getItemSeekBar(title: CharSequence, streamType: Int): CommonItemSeekBar { + return CommonItemSeekBar(title, VolumeUtils.getMaxVolume(streamType), object : CommonItemSeekBar.ProgressListener() { + override fun getCurValue(): Int { + return VolumeUtils.getVolume(streamType) + } + + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + VolumeUtils.setVolume(streamType, progress, AudioManager.FLAG_SHOW_UI) + } + }) + } + + override fun onResume() { + super.onResume() + itemsView.updateItems(bindItems()) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt index 344a69e448..7d38fda3ca 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt @@ -1,20 +1,25 @@ package com.blankj.utilcode.pkg.helper -import android.app.Dialog +import android.content.Context +import android.content.DialogInterface import android.graphics.Bitmap import android.graphics.drawable.ColorDrawable -import android.support.v7.app.AlertDialog import android.text.method.ScrollingMovementMethod import android.view.Gravity -import android.view.LayoutInflater import android.view.View +import android.view.Window import android.widget.Button import android.widget.EditText import android.widget.ImageView import android.widget.TextView +import androidx.fragment.app.FragmentActivity +import com.blankj.base.dialog.BaseDialogFragment +import com.blankj.base.dialog.DialogLayoutCallback import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.* -import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest +import com.blankj.utilcode.util.ActivityUtils +import com.blankj.utilcode.util.KeyboardUtils +import com.blankj.utilcode.util.ScreenUtils +import com.blankj.utilcode.util.ToastUtils /** * ``` @@ -26,95 +31,128 @@ import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldReques */ object DialogHelper { - fun showRationaleDialog(shouldRequest: ShouldRequest) { - val topActivity = ActivityUtils.getTopActivity() - 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 showKeyboardDialog(context: Context) { + BaseDialogFragment().init(context, object : DialogLayoutCallback { + override fun bindTheme(): Int { + return View.NO_ID + } - fun showOpenAppSettingDialog() { - val topActivity = ActivityUtils.getTopActivity() - 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() - } + override fun bindLayout(): Int { + return R.layout.keyboard_dialog + } + + override fun initView(dialog: BaseDialogFragment, contentView: View) { + dialog.dialog.setCanceledOnTouchOutside(false) - fun showKeyboardDialog() { - val topActivity = ActivityUtils.getTopActivity() - val dialog = Dialog(topActivity) - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_keyboard, null) - - val keyboardDialogEt = dialogView.findViewById (R.id.keyboardDialogEt) - val listener = View.OnClickListener { v -> - when (v.id) { - R.id.keyboardDialogHideSoftInputBtn -> KeyboardUtils.hideSoftInput(keyboardDialogEt) - R.id.keyboardDialogShowSoftInputBtn -> KeyboardUtils.showSoftInput(keyboardDialogEt) - R.id.keyboardDialogToggleSoftInputBtn -> KeyboardUtils.toggleSoftInput() - R.id.keyboardDialogCloseBtn -> { - KeyboardUtils.hideSoftInput(keyboardDialogEt) - dialog.dismiss() + val keyboardDialogEt = contentView.findViewById (R.id.keyboardDialogEt) + val listener = View.OnClickListener { v -> + when (v.id) { + R.id.keyboardDialogHideSoftInputBtn -> KeyboardUtils.hideSoftInput(keyboardDialogEt) + R.id.keyboardDialogShowSoftInputBtn -> KeyboardUtils.showSoftInput(keyboardDialogEt) + R.id.keyboardDialogToggleSoftInputBtn -> KeyboardUtils.toggleSoftInput() + R.id.keyboardDialogCloseBtn -> { + KeyboardUtils.hideSoftInput(keyboardDialogEt) + dialog.dismiss() + } + } } + contentView.findViewById (R.id.keyboardDialogHideSoftInputBtn).setOnClickListener(listener) + contentView.findViewById (R.id.keyboardDialogShowSoftInputBtn).setOnClickListener(listener) + contentView.findViewById (R.id.keyboardDialogToggleSoftInputBtn).setOnClickListener(listener) + contentView.findViewById (R.id.keyboardDialogCloseBtn).setOnClickListener(listener) + + dialog.dialog.setOnShowListener(DialogInterface.OnShowListener { + KeyboardUtils.fixAndroidBug5497(dialog.dialog.window!!) + KeyboardUtils.showSoftInput() + }) + } + + override fun setWindowStyle(window: Window) { + window.setBackgroundDrawable(ColorDrawable(0)) + val attributes = window.attributes + attributes.gravity = Gravity.BOTTOM + attributes.width = ScreenUtils.getAppScreenWidth() + attributes.height = ScreenUtils.getAppScreenHeight() * 2 / 5 + attributes.windowAnimations = R.style.BottomDialogAnimation + window.attributes = attributes } - } - dialogView.findViewById (R.id.keyboardDialogHideSoftInputBtn).setOnClickListener(listener) - dialogView.findViewById (R.id.keyboardDialogShowSoftInputBtn).setOnClickListener(listener) - dialogView.findViewById (R.id.keyboardDialogToggleSoftInputBtn).setOnClickListener(listener) - dialogView.findViewById (R.id.keyboardDialogCloseBtn).setOnClickListener(listener) - - dialog.setContentView(dialogView) - dialog.setCanceledOnTouchOutside(false) - - val window = dialog.window - dialog.setOnShowListener { KeyboardUtils.fixAndroidBug5497(window) } - - window.setBackgroundDrawable(ColorDrawable(0)) - val attributes = dialog.window.attributes - attributes.gravity = Gravity.BOTTOM - attributes.width = ScreenUtils.getAppScreenWidth() - attributes.height = ScreenUtils.getAppScreenHeight() * 2 / 5 - attributes.windowAnimations = R.style.BottomDialogAnimation - dialog.window.attributes = attributes - - dialog.show() + + override fun onCancel(dialog: BaseDialogFragment) {} + + override fun onDismiss(dialog: BaseDialogFragment) {} + }).show() } fun showFragmentDialog(info: CharSequence) { - val topActivity = ActivityUtils.getTopActivity() - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_fragment, null) - val aboutTv = dialogView.findViewById (R.id.fragmentDialogAboutTv) - aboutTv.movementMethod = ScrollingMovementMethod.getInstance() - aboutTv.text = info - val dialog = AlertDialog.Builder(topActivity).setView(dialogView).create() - dialog.show() + val topActivity = ActivityUtils.getTopActivity() ?: return + BaseDialogFragment().init(topActivity as FragmentActivity, object : DialogLayoutCallback { + override fun bindTheme(): Int { + return R.style.CommonContentDialogStyle + } + + override fun bindLayout(): Int { + return R.layout.fragment_dialog + } + + override fun initView(dialog: BaseDialogFragment, contentView: View) { + val aboutTv = contentView.findViewById (R.id.fragmentDialogAboutTv) + aboutTv.movementMethod = ScrollingMovementMethod.getInstance() + aboutTv.text = info + } + + override fun setWindowStyle(window: Window) {} + + override fun onCancel(dialog: BaseDialogFragment) {} + + override fun onDismiss(dialog: BaseDialogFragment) {} + }).show() } fun showScreenshotDialog(screenshot: Bitmap) { - val topActivity = ActivityUtils.getTopActivity() - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_screen, null) - val screenshotIv = dialogView.findViewById (R.id.screenDialogScreenshotIv) - screenshotIv.setImageBitmap(screenshot) - val dialog = AlertDialog.Builder(topActivity).setView(dialogView).create() - dialog.show() + val topActivity = ActivityUtils.getTopActivity() ?: return + BaseDialogFragment().init(topActivity as FragmentActivity, object : DialogLayoutCallback { + override fun bindTheme(): Int { + return R.style.CommonContentDialogStyle + } + + override fun bindLayout(): Int { + return R.layout.screen_dialog + } + + override fun initView(dialog: BaseDialogFragment, contentView: View) { + contentView.findViewById (R.id.screenDialogScreenshotIv) + .setImageBitmap(screenshot) + } + + override fun setWindowStyle(window: Window) {} + + override fun onCancel(dialog: BaseDialogFragment) {} + + override fun onDismiss(dialog: BaseDialogFragment) {} + }).show() } fun showToastDialog() { - val topActivity = ActivityUtils.getTopActivity() - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_toast, null) - dialogView.findViewById