diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000000..750e8ac81a
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/donate.png
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index daea781567..0000000000
--- a/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,44 +0,0 @@
-## Describe the bug
-
-A clear and concise description of what the bug is.
-
-- The version of utilcode:
-- The device:
-- The version of device:
-
-## The code of bug
-
-
-```
-put your code here
-```
-
-## The stack of crash
-
-
-
-```
-put the stack of crash here
-```
-
-## Screenshots
-
-If applicable, add screenshots to help explain your problem.
-
-
-Please delete the current line and the followings.
-
-Thank you for supporting [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode).
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000000..e29c2e45b6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,52 @@
+---
+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 AndroidUtilCode:
+- The device:
+- The version of device:
+
+## The code of bug
+
+
+```
+put your code here
+```
+
+## The stack of crash
+
+
+
+```
+put the stack of crash here
+```
+
+## Screenshots
+
+If applicable, add screenshots to help explain your problem.
+
+
+## Please delete the current line and the following.
+
+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 804ef71038..9d11f56a24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,15 @@
*.iml
+__api__.json
+__bus__.json
.gradle
-/local.properties
+local.properties
.idea
.DS_Store
/build
/captures
.externalNativeBuild
-/apk
\ No newline at end of file
+/apk
+*.phrof
+/mavenLocal
+/reports
+*/reports
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index b4e77e194d..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 build connectedCheck --info
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8d192a9c86..73e8145bf1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,153 @@
+* `22/10/15` [add] Fix some issue. Publish v1.31.1
+* `21/12/06` [add] Publish v1.31.0
+* `21/05/13` [add] Support publish mavenCentral.
+* `21/02/22` [add] Fix ToastUtils rtl bug. Publish v1.30.6.
+* `20/11/16` [add] Add ImageUtils#save2Album support param of dirName.
+* `20/11/13` [add] Fix MessengerUtils ANR. Add NetworkUtils#getWifiScanResult, [add|remove]OnWifiChangedConsumer. Publish v1.30.5.
+* `20/10/29` [add] Fix MessengerUtils startService IllegalStateException. Publish v1.30.4.
+* `20/10/28` [add] Fix BusUtils ConcurrentModificationException. Publish v1.30.3.
+* `20/10/27` [add] Fix AppUtils#getAppSignatures. Add DeviceUtils#isDevelopmentSettingsEnabled. Publish v1.30.2.
+* `20/10/26` [add] Fix AppUtils#isAppForeground. Publish v1.30.1.
+* `20/10/24` [add] Publish v1.30.0.
+* `20/10/23` [fix] LanguageUtils crash on some device.
+* `20/10/21` [add] LogUtils.Config#setOnConsoleOutputListener, setOnFileOutputListener, addFileExtraHead. LogUtils.getCurrentLogFilePath.
+* `20/10/20` [opt] ToastUtils.
+* `20/10/12` [add] PermissionUtils#explain.
+* `20/10/10` [add] ClipboardUtils.
+* `20/10/08` [add] VolumeUtils.
+* `20/09/06` [add] DebouncingUtils#isValid.
+* `20/09/04` [fix] ToastUtils adapt SDK 30.
+* `20/05/28` [fix] IntentUtils#getInstallAppIntent file exist wrong. Publish v1.29.0.
+* `20/05/23` [fix] BusUtils#postSticky times not right. Publish v1.28.6.
+* `20/05/22` [add] IntentUtils#getInstallAppIntent support Uri param.
+* `20/05/21` [add] Publish bus plugin v2.6. Publish api plugin v1.4. Publish. Publish v1.28.5.
+* `20/05/19` [fix] FileUtils#copyOrMoveDird NPE.
+* `20/05/18` [add] IntentUtils#getLaunchAppDetailsSettingsIntent support isNewTask.
+* `20/05/17` [add] ImageUtils#save2Album, NetworkUtils#getSSID, UtilsTransActivity4MainProcess.
+* `20/05/03` [add] Publish bus plugin v2.5. Publish api plugin v1.3. Publish. Publish v1.28.4.
+* `20/04/30` [add] BaseItem support partialUpdate.
+* `20/04/29` [add] Publish plugin lib com.blankj:base-transform:1.0.
+* `20/04/28` [fix] LanguageUtils#applyLanguage.
+* `20/04/27` [fix] BarUtils#isNavBarVisible.
+* `20/04/26` [fix] Utils#init fit tinker. Publish v1.28.3.
+* `20/04/25` [fix] UriUtils#uri2File Unknown URI. Publish 1.28.2.
+* `20/04/24` [add] SnackbarUtils support show on the top; UriUtils#uri2InputStream.
+* `20/04/23` [fix] UriUtils#uri2File not support HW; TransActivity crash below 21.
+* `20/04/23` [fix] PhoneUtils#getSerial, PhoneUtils#getSerial crash on Android 10.
+* `20/04/20` [fix] ImageUtils#isImage.
+* `20/04/18` [fix] PermissionUtils#callback. Publish v1.28.1.
+* `20/04/17` [fix] ImageUtils#view2Bitmap, ImageUtils.getBitmap(InputStream).
+* `20/04/16` [add] ConvertUtils#int2HexString, hexString2Int.
+* `20/04/15` [add] UiMessageUtils' demo.
+* `20/04/13` [add] NumberUtils. Publish v1.28.0.
+* `20/04/12` [opt] TimeUtils#SDF_THREAD_LOCAL.
+* `20/04/11` [add] SDCardUtils#getXxTotalSize, SDCardUtils#getXxAvailableSize. FileUtils#getFsTotalSize, FileUtils#getFsAvailableSize.
+* `20/04/10` [fix] FileUtils#isFileExists; FragmentUtils#getTop bug. Publish v1.27.6.
+* `20/04/09` [add] UriUtils#res2Uri, UriUtils#uri2File support QQBrowser; ThreadUtils#getMainHandler; PathUtils#getxxPathExternalFirst.
+* `20/04/08` [fix] ActivityUtils#finish bug. Publish v1.27.5.
+* `20/04/08` [fix] CleanUtils clean dir not work. FileUtils#isFileExists. Publish v1.27.4.
+* `20/04/08` [fix] CrashUtils DefaultUncaughtExceptionHandler is wrong; LogUtils write file failed; Utils#getApp failed run on remote process. Publish v1.27.3.
+* `20/04/07` [mdf] GsonUtils#getGson() method public.
+* `20/04/04` [fix] ShadowUtils bug running on lower version devices. Publish v1.27.2.
+* `20/04/03` [fix] UtilsActivityLifecycleImpl#HashMap#remove IllegalStateException bug.
+* `20/04/02` [fix] PathUtils sdcard enable state is wrong; ActivityUtils finish activity wrong; Publish v1.27.1.
+* `20/03/31` [add] Publish v1.27.0.
+* `20/03/30` [add] BatteryUtils in subutil.
+* `20/03/27` [add] publish.gradle.
+* `20/03/24` [add] UtilsBridge to clean the utils.
+* `20/03/22` [upd] GsonUtils support custom gson.
+* `20/03/20` [add] ActivityUtils#addActivityLifecycleCallbacks, ActivityUtils#removeActivityLifecycleCallbacks.
+* `20/01/17` [upd] Leak Canary to v2.1.
+* `20/01/06` [add] ClickUtils#expandClickArea, ClickUtils#back2HomeFriendly
+* `19/11/30` [add] Publish bus plugin v2.4. Publish api plugin v1.2.
+* `19/11/28` [add] Publish v1.26.0.
+* `19/11/27` [add] Shadow demo.
+* `19/11/26` [add] MVP demo.
+* `19/11/22` [fix] Adapt the project for Gradle version of 6.0.
+* `19/10/30` [add] Publish bus plugin v2.3. Publish api plugin v1.1.
+* `19/10/24` [upd] Demo's UI.
+* `19/10/22` [add] NotificationUtils and demo.
+* `19/10/20` [add] UiMessageUtils.
+* `19/09/20` [add] ShadowUtils.
+* `19/08/27` [add] DebugUtils.
+* `19/08/26` [fix] PermissionUtils NPE.
+* `19/08/25` [upd] ImageUtils#getImageType. [add] LogUtils#getLogFiles. Publish v1.25.9.
+* `19/08/24` [fix] PhoneUtils#getIMEI crash on SDK 29.
+* `19/08/23` [add] ViewUtils#isLayoutRtl.
+* `19/08/22` [add] LogUtils#getLogFiles.
+* `19/08/13` [add] MapUtils and MapUtilsTest. Publish v1.25.8.
+* `19/08/12` [add] CollectionUtils and CollectionUtilsTest.
+* `19/08/11` [add] ArrayUtils and ArrayUtilsTest.
+* `19/08/09` [fix] https://www.virustotal.com/gui/home/upload with ESET-NOD32. Publish v1.25.7.
+* `19/08/08` [add] BusUtils#post tag support one-to-many. Publish v1.25.6.
+* `19/08/04` [add] ThreadUtils#Task support timeout.
+* `19/08/01` [upd] EncryptUtils#rsa.
+* `19/07/31` [add] DeviceUtils#getUniqueDeviceId, DeviceUtils#isSameDevice. Publish v1.25.5.
+* `19/07/30` [fix] ThreadUtils's task can only be executed once. PhoneUtils#getIMEI wrong.
+* `19/07/29` [fix] BusUtils post father class useless. KeyboardUtils#hideSoft bug. Publish v1.25.4.
+* `19/07/28` [add] NetworkUtils#(un)registerNetworkStatusChangedListener. Publish v1.25.3.
+* `19/07/27` [fix] ThreadUtils memory leak.
+* `19/07/26` [add] ContainerUtils. Publish v1.25.2.
+* `19/07/25` [fix] PermissionUtils' NullPointException.
+* `19/07/24` [fix] ZipUtils#unzipFile.
+* `19/07/23` [fix] ThreadUtils of cache pool. Publish v1.25.1.
+* `19/07/18` [add] README of ApiUtils and BusUtils.
+* `19/07/15` [add] Publish v1.25.0.
+* `19/07/14` [upd] Bus plugin for use BusUtils. Publish bus plugin v2.0.
+* `19/07/13` [add] Api plugin for use ApiUtils. Publish api plugin v1.0.
+* `19/07/09` [upd] The frame of project.
+* `19/07/06` [upd] BusUtils which behave same as EventBus.
+* `19/07/03` [add] ApiUtils which decoupling modules.
+* `19/06/30` [add] LanguageUtils support activity's class name.
+* `19/06/29` [add] ClickUtils#OnMultiClickListener, and remove dangerous function. Publish v1.24.6.
+* `19/06/28` [add] LanguageUtils. Publish v1.24.5.
+* `19/06/20` [fix] BusUtils' permission. Publish v1.24.4.
+* `19/06/19` [fix] UriUtils. Publish v1.24.3.
+* `19/06/18` [add] ClickUtils, ViewUtils.
+* `19/06/07` [fix] LogUtils file name contains ':'. Publish v1.24.2.
+* `19/06/06` [fix] LogUtils write to file. Publish v1.24.1.
+* `19/06/03` [fix] Refactoring framework. Publish v1.24.0.
+* `19/04/25` [fix] LogUtils delete due log.
+* `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.
+* `19/02/26` [fix] UriUtils#uri2File. Publish v1.23.5.
+* `19/01/31` [add] HttpUtils.
+* `19/01/30` [add] RomUtils. Publish v1.23.4.
+* `19/01/29` [fix] LogUtils format json when json not start with '{'. Publish v1.23.3.
+* `19/01/28` [fix] KeyboardUtils#fixSoftInputLeaks don't work on the device of HuaWei.
+* `19/01/26` [fix] NetworkUtils#getNetworkType.
+* `19/01/25` [add] CloneUtils, PermissionUtils support request permission of WRITE_SETTINGS and DRAW_OVERLAYS. Publish v1.23.2.
+* `19/01/24` [add] BrightnessUtils and FlashlightUtils.
+* `19/01/23` [add] Modify the demo of utilcode use kotlin. Publish v1.23.1.
+* `19/01/22` [fix] AppUtils#installApp.
+* `19/01/17` [fix] Publish v1.23.0.
+* `19/01/16` [fix] BarUtils get Activity from view and delete the function of set status bar alpha.
+* `19/01/15` [add] ColorUtils.
+* `19/01/04` [add] CacheDiskStaticUtils, CacheDoubleStaticUtils, CacheMemoryStaticUtils.
+* `19/01/03` [add] SPStaticUtils.
+* `19/01/02` [fix] LogUtils log object. Publish v1.22.10.
+* `19/01/01` [add] GsonUtils.
+* `18/12/29` [add] AntiShakeUtils and VibrateUtils. Publish v1.22.9.
+* `18/12/28` [fix] ToastUtils show behind the dialog when close notification.
+* `18/12/27` [fix] LogUtils print StringBuilder failed.
+* `18/12/24` [fix] Utils$ActivityLifecycleImpl.consumeOnActivityDestroyedListener ConcurrentModificationException. Publish v1.22.7.
+* `18/12/22` [fix] AdaptScreenUtils#pt2px don't work when start webview. Publish v1.22.6.
+* `18/12/21` [add] LogUtils support print Map, Collection and Object to String.
+* `18/12/19` [fix] AdaptScreenUtils don't work in MIUI on Android 5.1.1. Publish v1.22.5.
+* `18/12/18` [fix] ToastUtils multi show crash when run API 25. Publish v1.22.4.
+* `18/12/18` [fix] ImageUtils recycle ret equals src. Publish v1.22.3.
+* `18/12/17` [fix] Utils$FileProvider4UtilCode not found. Publish v1.22.3.
+* `18/12/17` [fix] ToastUtils leak. Publish v1.22.2.
+* `18/12/09` [add] Component for the project.
+* `18/12/04` [add] BusUtils. Publish v1.22.1.
+* `18/11/18` [fix] ToastUtils don't show in the devices grater than API 24 when close the permission of notification. Publish v1.22.0.
+* `18/11/17` [fix] AppUtils#isAppInstalled don't work in no launcher app.
+* `18/11/16` [fix] ThreadUtils#cancel block the main thread.
* `18/11/15` [add] module of bus-gradle-plugin and change style of gradle.
* `18/11/14` [add] BusUtils.
* `18/11/13` [add] AdaptScreenUtils.
diff --git a/README-CN.md b/README-CN.md
index a763c8a451..5c85dca1fe 100644
--- a/README-CN.md
+++ b/README-CN.md
@@ -1,6 +1,8 @@
-![logo][logo]
+[![logo][logo]](https://github.com/Blankj/AndroidUtilCode)
-[![auc][aucSvg]][auc] [![api][apiSvg]][api] [![build][buildSvg]][build] [![Insight][insightSvg]][insight] [![License][licenseSvg]][license]
+[![frame][frame]](https://github.com/Blankj/AucFrameTemplate)
+
+[![auc][aucSvg]][auc] [![result][apiSvg]][result] [![build][buildSvg]][build] [![License][licenseSvg]][license]
## [README of English][readme]
@@ -35,35 +37,38 @@
[![Blog][blogSvg]][blog] [![jianshu][jianshuSvg]][jianshu] [![weibo][weiboSvg]][weibo] [![QQGroup][qqgroupSvg]][qqgroup]
-## [Update Log][updateLog.md]
+## [Change Log][changeLog.md]
+
+
+## 打个小广告
+欢迎加入我的小专栏「**[基你太美](https://xiaozhuanlan.com/Blankj)**」一起学习。
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
-[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.21.2-brightgreen.svg
+[frame]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/auc_frame_cn.png
+
+[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
-[api]: https://android-arsenal.com/api?level=14
+[result]: https://android-arsenal.com/result?level=14
[buildSvg]: https://travis-ci.org/Blankj/AndroidUtilCode.svg?branch=master
[build]: https://travis-ci.org/Blankj/AndroidUtilCode
-[insightSvg]: https://www.insight.io/repoBadge/github.com/Blankj/AndroidUtilCode
-[insight]: https://insight.io/github.com/Blankj/AndroidUtilCode
-
[licenseSvg]: https://img.shields.io/badge/License-Apache--2.0-brightgreen.svg
[license]: https://github.com/Blankj/AndroidUtilCode/blob/master/LICENSE
[readme]: https://github.com/Blankj/AndroidUtilCode
[readme-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md
-[utilcode]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README.md
-[utilcode-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-CN.md
+[utilcode]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README.md
+[utilcode-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md
-[subutil]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/README.md
-[subutil-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/README-CN.md
+[subutil]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/subutil/README.md
+[subutil-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/subutil/README-CN.md
[changeLog.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/CHANGELOG.md
diff --git a/README.md b/README.md
index ad902d1ac0..9ae668e26e 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
-![logo][logo]
+[![logo][logo]](https://github.com/Blankj/AndroidUtilCode)
-[![auc][aucSvg]][auc] [![api][apiSvg]][api] [![build][buildSvg]][build] [![Insight][insightSvg]][insight] [![License][licenseSvg]][license]
+[![frame][frame]](https://github.com/Blankj/AucFrameTemplate)
+
+[![auc][aucSvg]][auc] [![result][apiSvg]][result] [![build][buildSvg]][build] [![License][licenseSvg]][license]
## [README of Chinese][readme-cn]
@@ -35,35 +37,38 @@ If this project helps you a lot and you want to support the project's developmen
[![Blog][blogSvg]][blog] [![jianshu][jianshuSvg]][jianshu] [![weibo][weiboSvg]][weibo] [![QQGroup][qqgroupSvg]][qqgroup]
-## [Update Log][update_log.md]
+## [Change Log][changeLog.md]
+
+
+## 打个小广告
+欢迎加入我的小专栏「**[基你太美](https://xiaozhuanlan.com/Blankj)**」一起学习。
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
-[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.21.2-brightgreen.svg
+[frame]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/auc_frame.png
+
+[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
-[api]: https://android-arsenal.com/api?level=14
+[result]: https://android-arsenal.com/result?level=14
[buildSvg]: https://travis-ci.org/Blankj/AndroidUtilCode.svg?branch=master
[build]: https://travis-ci.org/Blankj/AndroidUtilCode
-[insightSvg]: https://www.insight.io/repoBadge/github.com/Blankj/AndroidUtilCode
-[insight]: https://insight.io/github.com/Blankj/AndroidUtilCode
-
[licenseSvg]: https://img.shields.io/badge/License-Apache--2.0-brightgreen.svg
[license]: https://github.com/Blankj/AndroidUtilCode/blob/master/LICENSE
[readme]: https://github.com/Blankj/AndroidUtilCode
[readme-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md
-[utilcode]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README.md
-[utilcode-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-CN.md
+[utilcode]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README.md
+[utilcode-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md
-[subutil]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/README.md
-[subutil-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/README-CN.md
+[subutil]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/subutil/README.md
+[subutil-cn]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/subutil/README-CN.md
[changeLog.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/CHANGELOG.md
diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100644
index ab574aded8..0000000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,25 +0,0 @@
-plugins {
- id "com.android.application"
- id 'kotlin-android'
- id 'kotlin-android-extensions'
-// id "com.blankj.bus"
-}
-// in config.gradle
-configAndroidDomain project
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation project(':utilcode-lib')
- implementation project(':subutil-lib')
-
- implementation dep.support.appcompat_v7
- implementation dep.support.design
- implementation dep.constraint
- implementation dep.kotlin
- implementation dep.free_proguard
- implementation 'com.r0adkll:slidableactivity:2.0.5'
- // LeakCanary
- debugImplementation dep.leakcanary.android
- releaseImplementation dep.leakcanary.android_no_op
-// implementation 'com.blankj:utilcode:1.21.2'
-}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
deleted file mode 100644
index 781f9c8aa5..0000000000
--- a/app/proguard-rules.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in G:\Android_IDE\ADT\sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
deleted file mode 100644
index aeaecd9d35..0000000000
--- a/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-
-
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/10 - * desc : config about constants - *- */ -public class Config { - - public static final String FILE_SEP = System.getProperty("file.separator"); - public static final String LINE_SEP = System.getProperty("line.separator"); - public static final String PKG = "com.blankj.androidutilcode"; - public static final String TEST_PKG = "com.blankj.testinstall"; - public static final String GITHUB = "https://github.com/Blankj/AndroidUtilCode"; - public static final String BLOG = "https://blankj.com"; - public static final String CACHE_PATH; - public static final String TEST_APK_PATH; - - static { - File cacheDir = Utils.getApp().getExternalCacheDir(); - if (cacheDir != null) { - CACHE_PATH = cacheDir.getAbsolutePath(); - } else { - CACHE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath(); - } - TEST_APK_PATH = CACHE_PATH + FILE_SEP + "test_install.apk"; - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/MainActivity.java b/app/src/main/java/com/blankj/androidutilcode/MainActivity.java deleted file mode 100644 index 8cd21dfecd..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/MainActivity.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.blankj.androidutilcode; - -import android.graphics.Color; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.design.widget.CollapsingToolbarLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.widget.Toolbar; -import android.view.View; - -import com.blankj.androidutilcode.base.BaseDrawerActivity; -import com.blankj.androidutilcode.feature.core.CoreUtilActivity; -import com.blankj.androidutilcode.feature.sub.SubUtilActivity; -import com.blankj.utilcode.util.BarUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/29 - * desc : MainActivity - *- */ -public class MainActivity extends BaseDrawerActivity { - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_main; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - Toolbar toolbar = findViewById(R.id.toolbar); - View fakeStatusBar = findViewById(R.id.fake_status_bar); - CollapsingToolbarLayout ctl = findViewById(R.id.ctl); - ctl.setExpandedTitleColor(Color.parseColor("#00FFFFFF")); - setSupportActionBar(toolbar); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, - rootLayout, - toolbar, - R.string.navigation_drawer_open, - R.string.navigation_drawer_close); - rootLayout.addDrawerListener(toggle); - toggle.syncState(); - - BarUtils.setStatusBarAlpha4Drawer(this, rootLayout, fakeStatusBar, 0, false); - BarUtils.addMarginTopEqualStatusBarHeight(toolbar); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } - - public void coreUtilClick(View view) { - CoreUtilActivity.start(this); - } - - public void subUtilClick(View view) { - SubUtilActivity.start(this); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/UtilsApp.java b/app/src/main/java/com/blankj/androidutilcode/UtilsApp.java deleted file mode 100644 index 4f4951d2a9..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/UtilsApp.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.blankj.androidutilcode; - -import android.annotation.SuppressLint; -import android.content.Context; - -import com.blankj.androidutilcode.base.BaseApplication; -import com.blankj.utilcode.util.AppUtils; -import com.blankj.utilcode.util.CrashUtils; -import com.blankj.utilcode.util.LogUtils; -import com.squareup.leakcanary.LeakCanary; - -import java.util.ArrayList; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/12 - * desc : app about utils - *- */ -public class UtilsApp extends BaseApplication { - - private static UtilsApp sInstance; - - public static UtilsApp getInstance() { - return sInstance; - } - - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(base); - } - - @Override - public void onCreate() { - super.onCreate(); - sInstance = this; - initLeakCanary(); - initLog(); - initCrash(); - } - - private void initLeakCanary() { - // 内存泄露检查工具 - if (LeakCanary.isInAnalyzerProcess(this)) { - // This process is dedicated to LeakCanary for heap analysis. - // You should not init your app in this process. - return; - } - LeakCanary.install(this); - } - - // init it in ur application - public void initLog() { - final LogUtils.Config config = LogUtils.getConfig() - .setLogSwitch(BuildConfig.DEBUG)// 设置 log 总开关,包括输出到控制台和文件,默认开 - .setConsoleSwitch(BuildConfig.DEBUG)// 设置是否输出到控制台开关,默认开 - .setGlobalTag(null)// 设置 log 全局标签,默认为空 - // 当全局标签不为空时,我们输出的 log 全部为该 tag, - // 为空时,如果传入的 tag 为空那就显示类名,否则显示 tag - .setLogHeadSwitch(true)// 设置 log 头信息开关,默认为开 - .setLog2FileSwitch(false)// 打印 log 时是否存到文件的开关,默认关 - .setDir("")// 当自定义路径为空时,写入应用的/cache/log/目录中 - .setFilePrefix("")// 当文件前缀为空时,默认为"util",即写入文件为"util-yyyy-MM-dd.txt" - .setBorderSwitch(true)// 输出日志是否带边框开关,默认开 - .setSingleTagSwitch(true)// 一条日志仅输出一条,默认开,为美化 AS 3.1 的 Logcat - .setConsoleFilter(LogUtils.V)// log 的控制台过滤器,和 logcat 过滤器同理,默认 Verbose - .setFileFilter(LogUtils.V)// log 文件过滤器,和 logcat 过滤器同理,默认 Verbose - .setStackDeep(1)// log 栈深度,默认为 1 - .setStackOffset(0)// 设置栈偏移,比如二次封装的话就需要设置,默认为 0 - .setSaveDays(3)// 设置日志可保留天数,默认为 -1 表示无限时长 - // 新增 ArrayList 格式化器,默认已支持 Array, Throwable, Bundle, Intent 的格式化输出 - .addFormatter(new LogUtils.IFormatter
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/24 - * desc : base about activity - *- */ -public abstract class BaseActivity extends AppCompatActivity - implements IBaseView { - - protected View mContentView; - protected Activity mActivity; - - /** - * 上次点击时间 - */ - private long lastClick = 0; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mActivity = this; - Bundle bundle = getIntent().getExtras(); - initData(bundle); - setBaseView(bindLayout()); - initView(savedInstanceState, mContentView); - doBusiness(); - } - - @SuppressLint("ResourceType") - protected void setBaseView(@LayoutRes int layoutId) { - if (layoutId <= 0) return; - setContentView(mContentView = LayoutInflater.from(this).inflate(layoutId, null)); - } - - /** - * 判断是否快速点击 - * - * @return {@code true}: 是
- * author: Blankj - * blog : http://blankj.com - * time : 2017/03/30 - * desc : base about application - *- */ -public class BaseApplication extends Application { - - private static final String TAG = "BaseApplication"; - - private static BaseApplication sInstance; - - public static BaseApplication getInstance() { - return sInstance; - } - - @Override - public void onCreate() { - super.onCreate(); - sInstance = this; - registerActivityLifecycleCallbacks(mCallbacks); - } - - private ActivityLifecycleCallbacks mCallbacks = new ActivityLifecycleCallbacks() { - - @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) { - Log.d(TAG, "onActivityCreated() called with: activity = [" + activity + "], savedInstanceState = [" + savedInstanceState + "]"); - } - - @Override - public void onActivityStarted(Activity activity) { - Log.d(TAG, "onActivityStarted() called with: activity = [" + activity + "]"); - } - - @Override - public void onActivityResumed(Activity activity) { - Log.d(TAG, "onActivityResumed() called with: activity = [" + activity + "]"); - } - - @Override - public void onActivityPaused(Activity activity) { - Log.d(TAG, "onActivityPaused() called with: activity = [" + activity + "]"); - } - - @Override - public void onActivityStopped(Activity activity) { - Log.d(TAG, "onActivityStopped() called with: activity = [" + activity + "]"); - } - - @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) { - Log.d(TAG, "onActivitySaveInstanceState() called with: activity = [" + activity + "], outState = [" + outState + "]"); - } - - @Override - public void onActivityDestroyed(Activity activity) { - Log.d(TAG, "onActivityDestroyed() called with: activity = [" + activity + "]"); - } - }; -} diff --git a/app/src/main/java/com/blankj/androidutilcode/base/BaseBackActivity.java b/app/src/main/java/com/blankj/androidutilcode/base/BaseBackActivity.java deleted file mode 100644 index dab3c6c092..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/BaseBackActivity.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.blankj.androidutilcode.base; - -import android.annotation.SuppressLint; -import android.support.annotation.LayoutRes; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CoordinatorLayout; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.ActionBar; -import android.support.v7.widget.Toolbar; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.widget.FrameLayout; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.utilcode.util.BarUtils; -import com.r0adkll.slidr.Slidr; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/06/27 - * desc : base about back activity - *- */ -public abstract class BaseBackActivity extends BaseActivity { - - protected CoordinatorLayout rootLayout; - protected Toolbar mToolbar; - protected AppBarLayout abl; - protected FrameLayout flActivityContainer; - - @SuppressLint("ResourceType") - @Override - protected void setBaseView(@LayoutRes int layoutId) { - Slidr.attach(this); - mContentView = LayoutInflater.from(this).inflate(R.layout.activity_back, null); - setContentView(mContentView); - rootLayout = findViewById(R.id.root_layout); - abl = findViewById(R.id.abl); - mToolbar = findViewById(R.id.toolbar); - flActivityContainer = findViewById(R.id.activity_container); - if (layoutId > 0) { - flActivityContainer.addView(LayoutInflater.from(this).inflate(layoutId, flActivityContainer, false)); - } - setSupportActionBar(mToolbar); - getToolBar().setDisplayHomeAsUpEnabled(true); - - BarUtils.setStatusBarColor(this, ContextCompat.getColor(UtilsApp.getInstance(), R.color.colorPrimary), 0); - BarUtils.addMarginTopEqualStatusBarHeight(rootLayout); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == android.R.id.home) { - finish(); - } - return super.onOptionsItemSelected(item); - } - - protected ActionBar getToolBar() { - return getSupportActionBar(); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/base/BaseDrawerActivity.java b/app/src/main/java/com/blankj/androidutilcode/base/BaseDrawerActivity.java deleted file mode 100644 index 7e44330965..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/BaseDrawerActivity.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.blankj.androidutilcode.base; - -import android.content.Intent; -import android.net.Uri; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.design.widget.NavigationView; -import android.support.v4.widget.DrawerLayout; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.widget.FrameLayout; - -import com.blankj.androidutilcode.Config; -import com.blankj.androidutilcode.R; -import com.blankj.utilcode.util.ActivityUtils; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/06/27 - * desc : base about drawer activity - *- */ -public abstract class BaseDrawerActivity extends BaseActivity { - - protected DrawerLayout rootLayout; - protected FrameLayout flActivityContainer; - - NavigationView.OnNavigationItemSelectedListener mListener = new NavigationView.OnNavigationItemSelectedListener() { - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_git_hub: - ActivityUtils.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Config.GITHUB))); - break; - case R.id.action_blog: - ActivityUtils.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Config.BLOG))); - break; - } - return false; - } - }; - - @Override - protected void setBaseView(@LayoutRes int layoutId) { - mContentView = LayoutInflater.from(this).inflate(R.layout.activity_drawer, null); - setContentView(mContentView); - rootLayout = findViewById(R.id.root_layout); - flActivityContainer = findViewById(R.id.activity_container); - flActivityContainer.addView(LayoutInflater.from(this).inflate(layoutId, flActivityContainer, false)); - NavigationView navigationView = findViewById(R.id.nav_view); - navigationView.setNavigationItemSelectedListener(mListener); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/base/BaseFragment.java b/app/src/main/java/com/blankj/androidutilcode/base/BaseFragment.java deleted file mode 100644 index a1ff0dabc0..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/BaseFragment.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.blankj.androidutilcode.base; - -import android.app.Activity; -import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/03/28 - * desc : base about v4-fragment - *- */ -public abstract class BaseFragment extends Fragment - implements IBaseView { - - private static final String TAG = "BaseFragment"; - private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN"; - - protected View mContentView; - protected Activity mActivity; - - private long lastClick = 0; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - Log.d(TAG, "onCreate: "); - super.onCreate(savedInstanceState); - if (savedInstanceState != null) { - boolean isSupportHidden = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN); - FragmentTransaction ft = getFragmentManager().beginTransaction(); - if (isSupportHidden) { - ft.hide(this); - } else { - ft.show(this); - } - ft.commitAllowingStateLoss(); - } - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - Log.d(TAG, "onCreateView: "); - setBaseView(inflater, bindLayout()); - return mContentView; - } - - protected void setBaseView(@NonNull LayoutInflater inflater, @LayoutRes int layoutId) { - if (layoutId <= 0) return; - mContentView = inflater.inflate(layoutId, null); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - Log.d(TAG, "onViewCreated: "); - super.onViewCreated(view, savedInstanceState); - Bundle bundle = getArguments(); - initData(bundle); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - Log.d(TAG, "onActivityCreated: "); - super.onActivityCreated(savedInstanceState); - mActivity = getActivity(); - initView(savedInstanceState, mContentView); - doBusiness(); - } - - @Override - public void onDestroyView() { - Log.d(TAG, "onDestroyView: "); - if (mContentView != null) { - ((ViewGroup) mContentView.getParent()).removeView(mContentView); - } - super.onDestroyView(); - } - - @Override - public void onDestroy() { - Log.d(TAG, "onDestroy: "); - super.onDestroy(); - } - - @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - Log.d(TAG, "onSaveInstanceState: "); - super.onSaveInstanceState(outState); - outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden()); - } - - private boolean isFastClick() { - long now = System.currentTimeMillis(); - if (now - lastClick >= 200) { - lastClick = now; - return false; - } - return true; - } - - @Override - public void onClick(View view) { - if (!isFastClick()) onWidgetClick(view); - } - - public
- * author: blankj - * blog : http://blankj.com - * time : 2018/03/23 - * desc : base about lazy fragment - *- */ -public abstract class BaseLazyFragment extends BaseFragment { - - private static final String TAG = "BaseLazyFragment"; - - private boolean isDataLoaded; - - public abstract void doLazyBusiness(); - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser); - super.setUserVisibleHint(isVisibleToUser); - if (isVisibleToUser && mContentView != null && !isDataLoaded) { - doLazyBusiness(); - isDataLoaded = true; - } - } - - @Override - public void doBusiness() { - if (getUserVisibleHint()) { - doLazyBusiness(); - isDataLoaded = true; - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/base/IBaseView.java b/app/src/main/java/com/blankj/androidutilcode/base/IBaseView.java deleted file mode 100644 index 01e16c64fa..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/IBaseView.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.blankj.androidutilcode.base; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/06/27 - * desc : - *- */ -interface IBaseView extends View.OnClickListener { - - /** - * 初始化数据 - * - * @param bundle 传递过来的 bundle - */ - void initData(@Nullable final Bundle bundle); - - /** - * 绑定布局 - * - * @return 布局 Id - */ - int bindLayout(); - - /** - * 初始化 view - */ - void initView(final Bundle savedInstanceState, final View contentView); - - /** - * 业务操作 - */ - void doBusiness(); - - /** - * 视图点击事件 - * - * @param view 视图 - */ - void onWidgetClick(final View view); -} diff --git a/app/src/main/java/com/blankj/androidutilcode/base/rv/BaseViewHolder.java b/app/src/main/java/com/blankj/androidutilcode/base/rv/BaseViewHolder.java deleted file mode 100644 index 2da4de8849..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/rv/BaseViewHolder.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.blankj.androidutilcode.base.rv; - -import android.support.annotation.IdRes; -import android.support.v7.widget.RecyclerView; -import android.util.SparseArray; -import android.view.View; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/08/22 - * desc : - *- */ -public class BaseViewHolder extends RecyclerView.ViewHolder { - - private SparseArray
- * author: Blankj - * blog : http://blankj.com - * time : 2017/08/22 - * desc : - *- */ -public abstract class BaseAdapter
- * author: Blankj - * blog : http://blankj.com - * time : 2017/08/22 - * desc : - *- */ -public abstract class SingleAdapter
- * author: Blankj - * blog : http://blankj.com - * time : 2017/08/21 - * desc : - *- */ -public interface OnItemClickListener { - void onItemClick(final View view, final int position); -} diff --git a/app/src/main/java/com/blankj/androidutilcode/base/rv/listener/OnItemLongClickListener.java b/app/src/main/java/com/blankj/androidutilcode/base/rv/listener/OnItemLongClickListener.java deleted file mode 100644 index 5f065dc99c..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/rv/listener/OnItemLongClickListener.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.blankj.androidutilcode.base.rv.listener; - -import android.view.View; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/08/21 - * desc : - *- */ -public interface OnItemLongClickListener { - boolean onItemLongClick(final View view, final int position); -} diff --git a/app/src/main/java/com/blankj/androidutilcode/data/DataManager.java b/app/src/main/java/com/blankj/androidutilcode/data/DataManager.java deleted file mode 100644 index 10699a5894..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/data/DataManager.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.blankj.androidutilcode.data; - -import com.blankj.utilcode.util.SPUtils; - -import java.util.Map; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/01/08 - * desc : manager about data - *- */ -public class DataManager { - - private static final SPUtils SP_UTILS = SPUtils.getInstance("demo"); - - public static void putString() { - SP_UTILS.put("STRING", "string"); - } - - public static String getString() { - return SP_UTILS.getString("STRING"); - } - - public static void putInt() { - SP_UTILS.put("INT", 21); - } - - public static String getInt() { - return String.valueOf(SP_UTILS.getInt("INT")); - } - - public static void putLong() { - SP_UTILS.put("LONG", Long.MAX_VALUE); - } - - public static String getLong() { - return String.valueOf(SP_UTILS.getLong("LONG")); - } - - public static void putFloat() { - SP_UTILS.put("FLOAT", (float) Math.PI); - } - - public static String getFloat() { - return String.valueOf(SP_UTILS.getFloat("FLOAT")); - } - - public static void putBoolean() { - SP_UTILS.put("BOOLEAN", true); - } - - public static String getBoolean() { - return String.valueOf(SP_UTILS.getBoolean("BOOLEAN")); - } - - public static void clear() { - SP_UTILS.clear(); - } - - public static String sp2String() { - StringBuilder sb = new StringBuilder(); - Map
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/29 - * desc : - *- */ -public class CoreUtilActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, CoreUtilActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_util_core; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - Utils.getApp(); - getToolBar().setTitle(getString(R.string.core_util)); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } - - public void coreUtilClick(View view) { - - } - - public void activityClick(View view) { - ActivityActivity.start(this); - } - - public void adaptScreenClick(View view) { - AdaptScreenActivity.start(this); - } - - public void appClick(View view) { - AppActivity.start(this); - } - - public void barClick(View view) { - BarActivity.start(this); - } - - public void cleanClick(View view) { - CleanActivity.start(this); - } - - public void crashClick(View view) { - throw new NullPointerException("crash test"); - } - - public void deviceClick(View view) { - DeviceActivity.start(this); - } - - public void fragmentClick(View view) { - FragmentActivity.start(this); - } - - public void imageClick(View view) { - ImageActivity.start(this); - } - - public void keyboardClick(View view) { - KeyboardActivity.start(this); - } - - public void logClick(View view) { - LogActivity.start(this); - } - - public void metaDataClick(View view) { - MetaDataActivity.start(this); - } - - public void networkClick(View view) { - NetworkActivity.start(this); - } - - public void pathClick(View view) { - PathActivity.start(this); - } - - public void permissionClick(View view) { - PermissionActivity.start(this); - } - - public void phoneClick(View view) { - PhoneActivity.start(this); - } - - public void processClick(View view) { - ProcessActivity.start(this); - } - - public void reflectClick(View view) { - ReflectActivity.start(this); - } - - public void resourceClick(View view) { - ResourceActivity.start(this); - } - - public void sdcardClick(View view) { - SDCardActivity.start(this); - } - - public void snackbarClick(View view) { - SnackbarActivity.start(this); - } - - public void spClick(View view) { - SPActivity.start(this); - } - - public void spannableClick(View view) { - SpanActivity.start(this); - } - - public void toastClick(View view) { - ToastActivity.start(this); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/activity/ActivityActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/activity/ActivityActivity.java deleted file mode 100644 index 0e44bd818e..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/activity/ActivityActivity.java +++ /dev/null @@ -1,285 +0,0 @@ -package com.blankj.androidutilcode.feature.core.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.annotation.Nullable; -import android.support.v4.app.ActivityOptionsCompat; -import android.view.View; -import android.view.Window; -import android.widget.ImageView; -import android.widget.TextView; - -import com.blankj.androidutilcode.Config; -import com.blankj.androidutilcode.MainActivity; -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.androidutilcode.feature.core.CoreUtilActivity; -import com.blankj.utilcode.util.ActivityUtils; -import com.blankj.utilcode.util.LogUtils; -import com.blankj.utilcode.util.SpanUtils; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about ActivityUtils - *- */ -public class ActivityActivity extends BaseBackActivity { - - ImageView viewSharedElement; - Random random = new Random(); - private Bitmap bitmap; - private Intent intent; - private Intent[] intents = new Intent[2]; - - public static void start(Context context) { - Intent starter = new Intent(context, ActivityActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); - } - return R.layout.activity_activity; - } - - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_activity)); - viewSharedElement = findViewById(R.id.view_shared_element); - findViewById(R.id.btn_clz).setOnClickListener(this); - findViewById(R.id.btn_clz_opt).setOnClickListener(this); - findViewById(R.id.btn_clz_anim).setOnClickListener(this); - findViewById(R.id.btn_act_clz).setOnClickListener(this); - findViewById(R.id.btn_act_clz_opt).setOnClickListener(this); - findViewById(R.id.btn_act_clz_shared_element).setOnClickListener(this); - findViewById(R.id.btn_act_clz_anim).setOnClickListener(this); - findViewById(R.id.btn_pkg_cls).setOnClickListener(this); - findViewById(R.id.btn_pkg_cls_opt).setOnClickListener(this); - findViewById(R.id.btn_pkg_cls_anim).setOnClickListener(this); - findViewById(R.id.btn_act_pkg_cls).setOnClickListener(this); - findViewById(R.id.btn_act_pkg_cls_opt).setOnClickListener(this); - findViewById(R.id.btn_act_pkg_cls_shared_element).setOnClickListener(this); - findViewById(R.id.btn_act_pkg_cls_anim).setOnClickListener(this); - findViewById(R.id.btn_intent).setOnClickListener(this); - findViewById(R.id.btn_intent_opt).setOnClickListener(this); - findViewById(R.id.btn_intent_shared_element).setOnClickListener(this); - findViewById(R.id.btn_intent_anim).setOnClickListener(this); - findViewById(R.id.btn_intents).setOnClickListener(this); - findViewById(R.id.btn_intents_opt).setOnClickListener(this); - findViewById(R.id.btn_intents_anim).setOnClickListener(this); - findViewById(R.id.btn_act_intents).setOnClickListener(this); - findViewById(R.id.btn_act_intents_opt).setOnClickListener(this); - findViewById(R.id.btn_act_intents_anim).setOnClickListener(this); - findViewById(R.id.btn_act_clz_shared_element).setOnClickListener(this); - findViewById(R.id.btn_start_home_activity).setOnClickListener(this); - findViewById(R.id.btn_finish_activity).setOnClickListener(this); - findViewById(R.id.btn_finish_to_activity).setOnClickListener(this); - findViewById(R.id.btn_finish_all_activities).setOnClickListener(this); - TextView tvAboutActivity = findViewById(R.id.tv_about_activity); - tvAboutActivity.setText(new SpanUtils() - .appendLine("isActivityExists: " + ActivityUtils.isActivityExists(Config.PKG, SubActivityActivity.class.getName())) - .appendLine("getLauncherActivity: " + ActivityUtils.getLauncherActivity(Config.PKG)) - .appendLine("getTopActivity: " + ActivityUtils.getTopActivity()) - .appendLine("isActivityExistsInStack: " + ActivityUtils.isActivityExistsInStack(CoreUtilActivity.class)) - .append("getActivityIcon: ") - .appendImage(ActivityUtils.getActivityIcon(this), SpanUtils.ALIGN_CENTER) - .appendLine() - .append("getActivityLogo: ") - .appendImage(ActivityUtils.getActivityLogo(this), SpanUtils.ALIGN_CENTER) - .create() - ); - bitmap = ((BitmapDrawable) viewSharedElement.getDrawable()).getBitmap(); - - intent = new Intent(this, SubActivityActivity.class); - intents[0] = intent; - intents[1] = new Intent(this, SubActivityActivity.class); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_clz: - ActivityUtils.startActivity(SubActivityActivity.class); - break; - case R.id.btn_clz_opt: - ActivityUtils.startActivity(SubActivityActivity.class, - getOption(random.nextInt(5))); - break; - case R.id.btn_clz_anim: - ActivityUtils.startActivity(SubActivityActivity.class, - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_act_clz: - ActivityUtils.startActivity(this, - SubActivityActivity.class); - break; - case R.id.btn_act_clz_opt: - ActivityUtils.startActivity(this, - SubActivityActivity.class, - getOption(random.nextInt(5))); - break; - - case R.id.btn_act_clz_shared_element: - ActivityUtils.startActivity(this, - SubActivityActivity.class, - viewSharedElement); - break; - case R.id.btn_act_clz_anim: - ActivityUtils.startActivity(this, - SubActivityActivity.class, - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_pkg_cls: - ActivityUtils.startActivity(this.getPackageName(), - SubActivityActivity.class.getName()); - break; - case R.id.btn_pkg_cls_opt: - ActivityUtils.startActivity(this.getPackageName(), - SubActivityActivity.class.getName(), - getOption(random.nextInt(5))); - break; - case R.id.btn_pkg_cls_anim: - ActivityUtils.startActivity(this.getPackageName(), - SubActivityActivity.class.getName(), - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_act_pkg_cls: - ActivityUtils.startActivity(this, - this.getPackageName(), - SubActivityActivity.class.getName()); - break; - case R.id.btn_act_pkg_cls_opt: - ActivityUtils.startActivity(this, - this.getPackageName(), - SubActivityActivity.class.getName(), - getOption(random.nextInt(5))); - break; - case R.id.btn_act_pkg_cls_shared_element: - ActivityUtils.startActivity(this, - this.getPackageName(), - SubActivityActivity.class.getName(), - viewSharedElement); - break; - case R.id.btn_act_pkg_cls_anim: - ActivityUtils.startActivity(this, - this.getPackageName(), - SubActivityActivity.class.getName(), - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_intent: - ActivityUtils.startActivity(this, - intent); - break; - case R.id.btn_intent_opt: - ActivityUtils.startActivity(this, - intent, - getOption(random.nextInt(5))); - break; - case R.id.btn_intent_shared_element: - ActivityUtils.startActivity(this, - intent, - viewSharedElement); - break; - case R.id.btn_intent_anim: - ActivityUtils.startActivity(this, - intent, - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_intents: - ActivityUtils.startActivities(intents); - break; - case R.id.btn_intents_opt: - ActivityUtils.startActivities(intents, - getOption(random.nextInt(5))); - break; - case R.id.btn_intents_anim: - ActivityUtils.startActivities(intents, - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_act_intents: - ActivityUtils.startActivities(this, - intents, - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_act_intents_opt: - ActivityUtils.startActivities(this, - intents, - getOption(random.nextInt(5))); - break; - case R.id.btn_act_intents_anim: - ActivityUtils.startActivities(this, - intents, - R.anim.fade_in_1000, R.anim.fade_out_1000); - break; - case R.id.btn_start_home_activity: - ActivityUtils.startHomeActivity(); - break; - case R.id.btn_finish_activity: - ActivityUtils.finishActivity(MainActivity.class); - break; - case R.id.btn_finish_to_activity: - ActivityUtils.finishToActivity(MainActivity.class, false, true); - break; - case R.id.btn_finish_all_activities: - ActivityUtils.finishAllActivities(); - break; - } - } - - private Bundle getOption(int type) { - LogUtils.d(type); - switch (type) { - case 0: - return ActivityOptionsCompat.makeCustomAnimation(this, - R.anim.slide_in_right_1000, - R.anim.slide_out_left_1000) - .toBundle(); - case 1: - return ActivityOptionsCompat.makeScaleUpAnimation(viewSharedElement, - viewSharedElement.getWidth() / 2, - viewSharedElement.getHeight() / 2, - 0, 0) - .toBundle(); - case 2: - return ActivityOptionsCompat.makeThumbnailScaleUpAnimation(viewSharedElement, - bitmap, - 0, 0) - .toBundle(); - case 3: - return ActivityOptionsCompat.makeSceneTransitionAnimation(this, - viewSharedElement, - getString(R.string.activity_shared_element)) - .toBundle(); - case 4: - return ActivityOptionsCompat.makeClipRevealAnimation(viewSharedElement, - viewSharedElement.getWidth() / 2, - viewSharedElement.getHeight() / 2, - 0, 0) - .toBundle(); - default: - return null; - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/activity/SubActivityActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/activity/SubActivityActivity.java deleted file mode 100644 index c1869269c4..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/activity/SubActivityActivity.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.blankj.androidutilcode.feature.core.activity; - -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; -import android.view.View; -import android.view.Window; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about ActivityUtils - *- */ -public class SubActivityActivity extends BaseBackActivity { - - Random random = new Random(); - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); - } - return R.layout.activity_activity_sub; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - ((View) flActivityContainer.getParent()).setBackgroundColor(Color.rgb(random.nextInt(256), random.nextInt(256), random.nextInt(256))); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } - - @Override - protected void onDestroy() { - super.onDestroy(); - } - - @Override - public void onBackPressed() { - super.onBackPressed(); - ActivityCompat.finishAfterTransition(this); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/AdaptScreenActivity.kt b/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/AdaptScreenActivity.kt deleted file mode 100644 index bf04b636e1..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/AdaptScreenActivity.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.blankj.androidutilcode.feature.core.adaptScreen - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import android.view.View -import com.blankj.androidutilcode.R -import com.blankj.androidutilcode.base.BaseBackActivity -import kotlinx.android.synthetic.main.activity_adapt_screen.* - -class AdaptScreenActivity : BaseBackActivity() { - - companion object { - @JvmStatic - fun start(context: Context) { - val starter = Intent(context, AdaptScreenActivity::class.java) - context.startActivity(starter) - } - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_adapt_screen; - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - adaptWidthBtn.setOnClickListener { WidthActivity.start(this) } - adaptHeightBtn.setOnClickListener { HeightActivity.start(this) } - closeAdaptBtn.setOnClickListener { CloseAdaptActivity.start(this) } - } - - override fun doBusiness() {} - - override fun onWidgetClick(view: View?) {} -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/CloseAdaptActivity.kt b/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/CloseAdaptActivity.kt deleted file mode 100644 index c4caa83c71..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/CloseAdaptActivity.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.blankj.androidutilcode.feature.core.adaptScreen - -import android.content.Context -import android.content.Intent -import android.content.res.Resources -import android.os.Bundle -import android.support.v7.app.AppCompatActivity -import android.view.WindowManager -import com.blankj.androidutilcode.R -import com.blankj.utilcode.util.AdaptScreenUtils - -class CloseAdaptActivity : AppCompatActivity() { - - companion object { - fun start(context: Context) { - val starter = Intent(context, CloseAdaptActivity::class.java) - context.startActivity(starter) - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_adapt_close) - } - - override fun getResources(): Resources { - return AdaptScreenUtils.closeAdapt(super.getResources()) - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/HeightActivity.kt b/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/HeightActivity.kt deleted file mode 100644 index dc38d45f18..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/HeightActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.blankj.androidutilcode.feature.core.adaptScreen - -import android.content.Context -import android.content.Intent -import android.content.res.Resources -import android.graphics.Color -import android.os.Bundle -import android.support.v7.app.AppCompatActivity -import android.view.WindowManager -import com.blankj.androidutilcode.R -import com.blankj.utilcode.util.AdaptScreenUtils -import kotlinx.android.synthetic.main.activity_adapt_height.* - -class HeightActivity : AppCompatActivity() { - - companion object { - fun start(context: Context) { - val starter = Intent(context, HeightActivity::class.java) - context.startActivity(starter) - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_adapt_height) - - heightVebView.setBackgroundColor(Color.parseColor("#f0d26d")) - } - - override fun getResources(): Resources { - return AdaptScreenUtils.adaptHeight(super.getResources(), 1920) - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/WidthActivity.kt b/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/WidthActivity.kt deleted file mode 100644 index 38ce3edb07..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/WidthActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.blankj.androidutilcode.feature.core.adaptScreen - -import android.content.Context -import android.content.Intent -import android.content.res.Resources -import android.graphics.Color -import android.os.Bundle -import android.support.v7.app.AppCompatActivity -import android.view.WindowManager -import com.blankj.androidutilcode.R -import com.blankj.utilcode.util.AdaptScreenUtils -import kotlinx.android.synthetic.main.activity_adapt_width.* - -class WidthActivity : AppCompatActivity() { - - companion object { - fun start(context: Context) { - val starter = Intent(context, WidthActivity::class.java) - context.startActivity(starter) - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_adapt_width) - - widthVebView.setBackgroundColor(Color.parseColor("#f0d26d")) - } - - override fun getResources(): Resources { - return AdaptScreenUtils.adaptWidth(super.getResources(), 1080) - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/app/AppActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/app/AppActivity.java deleted file mode 100644 index 5a9762b9f7..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/app/AppActivity.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.blankj.androidutilcode.feature.core.app; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.Config; -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.androidutilcode.helper.PermissionHelper; -import com.blankj.utilcode.util.AppUtils; -import com.blankj.utilcode.util.FileUtils; -import com.blankj.utilcode.util.LogUtils; -import com.blankj.utilcode.util.SpanUtils; -import com.blankj.utilcode.util.ToastUtils; -import com.blankj.utilcode.util.Utils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about AppUtils - *- */ - -public class AppActivity extends BaseBackActivity { - - private final OnReleasedListener listener = new OnReleasedListener() { - @Override - public void onReleased() { - AppUtils.installApp(Config.TEST_APK_PATH); - } - }; - - public static void start(Context context) { - Intent starter = new Intent(context, AppActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - AppUtils.registerAppStatusChangedListener(this, new Utils.OnAppStatusChangedListener() { - @Override - public void onForeground() { - ToastUtils.showShort("foreground"); - } - - @Override - public void onBackground() { - ToastUtils.showShort("background"); - } - }); - } - - @Override - public int bindLayout() { - return R.layout.activity_app; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_app)); - - findViewById(R.id.btn_install_app).setOnClickListener(this); - findViewById(R.id.btn_install_app_silent).setOnClickListener(this); - findViewById(R.id.btn_uninstall_app).setOnClickListener(this); - findViewById(R.id.btn_uninstall_app_silent).setOnClickListener(this); - findViewById(R.id.btn_launch_app).setOnClickListener(this); - findViewById(R.id.btn_relaunch_app).setOnClickListener(this); - findViewById(R.id.btn_exit_app).setOnClickListener(this); - findViewById(R.id.btn_launch_app_details_settings).setOnClickListener(this); - TextView tvAboutApp = findViewById(R.id.tv_about_app); - tvAboutApp.setText(new SpanUtils() - .appendLine("isAppRoot: " + AppUtils.isAppRoot()) - .appendLine("isAppDebug: " + AppUtils.isAppDebug()) - .appendLine("isAppSystem: " + AppUtils.isAppSystem()) - .appendLine("isAppForeground: " + AppUtils.isAppForeground()) - .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()) - .append("getAppSignatureMD5: " + AppUtils.getAppSignatureMD5()) - .create()); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_install_app: - if (AppUtils.isAppInstalled(Config.TEST_PKG)) { - ToastUtils.showShort(R.string.app_install_tips); - } else { - PermissionHelper.requestStorage(new PermissionHelper.OnPermissionGrantedListener() { - @Override - public void onPermissionGranted() { - if (!FileUtils.isFileExists(Config.TEST_APK_PATH)) { - new ReleaseInstallApkTask(listener).execute(); - } else { - listener.onReleased(); - LogUtils.d("test apk existed."); - } - } - }); - } - break; - case R.id.btn_install_app_silent: - if (AppUtils.isAppInstalled(Config.TEST_PKG)) { - ToastUtils.showShort(R.string.app_install_tips); - } else { - if (AppUtils.installAppSilent(Config.TEST_APK_PATH)) { - ToastUtils.showShort(R.string.install_successfully); - } else { - ToastUtils.showShort(R.string.install_unsuccessfully); - } - } - break; - case R.id.btn_uninstall_app: - if (AppUtils.isAppInstalled(Config.TEST_PKG)) { - AppUtils.uninstallApp(Config.TEST_PKG); - } else { - ToastUtils.showShort(R.string.app_uninstall_tips); - } - break; - case R.id.btn_uninstall_app_silent: - if (AppUtils.isAppInstalled(Config.TEST_PKG)) { - if (AppUtils.uninstallAppSilent(Config.TEST_PKG, false)) { - ToastUtils.showShort(R.string.uninstall_successfully); - } else { - ToastUtils.showShort(R.string.uninstall_unsuccessfully); - } - } else { - ToastUtils.showShort(R.string.app_uninstall_tips); - } - break; - case R.id.btn_launch_app: - AppUtils.launchApp(this.getPackageName()); - break; - case R.id.btn_relaunch_app: - AppUtils.relaunchApp(); - break; - case R.id.btn_launch_app_details_settings: - AppUtils.launchAppDetailsSettings(); - break; - case R.id.btn_exit_app: - AppUtils.exitApp(); - break; - } - } - - @Override - protected void onDestroy() { - AppUtils.unregisterAppStatusChangedListener(this); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/app/OnReleasedListener.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/app/OnReleasedListener.java deleted file mode 100644 index 4e935b28c9..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/app/OnReleasedListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.blankj.androidutilcode.feature.core.app; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/05/23 - * desc : - *- */ -public interface OnReleasedListener { - void onReleased(); -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/app/ReleaseInstallApkTask.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/app/ReleaseInstallApkTask.java deleted file mode 100644 index 8bc28dd54b..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/app/ReleaseInstallApkTask.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.blankj.androidutilcode.feature.core.app; - -import com.blankj.androidutilcode.Config; -import com.blankj.utilcode.util.ResourceUtils; -import com.blankj.utilcode.util.ThreadUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/05/23 - * desc : - *- */ -public class ReleaseInstallApkTask extends ThreadUtils.SimpleTask
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - *- */ -public class BarActivity extends BaseBackActivity { - - private TextView tvAboutStatus; - - public static void start(Context context) { - Intent starter = new Intent(context, BarActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_bar; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_bar)); - - tvAboutStatus = findViewById(R.id.tv_about_status); - findViewById(R.id.btn_status_bar).setOnClickListener(this); - findViewById(R.id.btn_status_bar_color).setOnClickListener(this); - findViewById(R.id.btn_status_bar_alpha).setOnClickListener(this); - findViewById(R.id.btn_status_bar_image_view).setOnClickListener(this); - findViewById(R.id.btn_status_bar_fragment).setOnClickListener(this); - findViewById(R.id.btn_status_bar_swipe_back).setOnClickListener(this); - findViewById(R.id.btn_status_bar_drawer).setOnClickListener(this); - findViewById(R.id.btn_notification_bar).setOnClickListener(this); - findViewById(R.id.btn_nav_bar).setOnClickListener(this); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_status_bar: - BarStatusActivity.start(this); - break; - case R.id.btn_status_bar_color: - BarStatusColorActivity.start(this); - break; - case R.id.btn_status_bar_alpha: - BarStatusAlphaActivity.start(this); - break; - case R.id.btn_status_bar_image_view: - BarStatusImageViewActivity.start(this); - break; - case R.id.btn_status_bar_fragment: - BarStatusFragmentActivity.start(this); - break; - case R.id.btn_status_bar_swipe_back: - BarStatusSwipeBackActivity.start(this); - break; - case R.id.btn_status_bar_drawer: - BarStatusDrawerActivity.start(this); - break; - case R.id.btn_notification_bar: - BarNotificationActivity.start(this); - break; - case R.id.btn_nav_bar: - BarNavActivity.start(this); - break; - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarNavActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarNavActivity.java deleted file mode 100644 index 1ac209da61..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarNavActivity.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.annotation.RequiresApi; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.BarUtils; -import com.blankj.utilcode.util.SpanUtils; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about BarUtils - *- */ -public class BarNavActivity extends BaseBackActivity { - - private Random random = new Random(); - - private TextView tvAboutNav; - - public static void start(Context context) { - Intent starter = new Intent(context, BarNavActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_nav; - } - - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - rootLayout.setBackgroundColor(Color.GRAY); - getToolBar().setTitle(getString(R.string.demo_bar)); - - tvAboutNav = findViewById(R.id.tv_about_nav); - findViewById(R.id.btn_nav_show).setOnClickListener(this); - findViewById(R.id.btn_nav_hide).setOnClickListener(this); - findViewById(R.id.btn_nav_set_color).setOnClickListener(this); - updateAboutNav(); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_nav_show: - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - BarUtils.setNavBarVisibility(this, true); - } - break; - case R.id.btn_nav_hide: - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - BarUtils.setNavBarVisibility(this, false); - } - break; - case R.id.btn_nav_set_color: - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - BarUtils.setNavBarColor(this, Color.argb(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(256))); - } - break; - } - updateAboutNav(); - } - - private void updateAboutNav() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - tvAboutNav.setText(new SpanUtils() - .appendLine("navHeight: " + BarUtils.getNavBarHeight()) - .appendLine("isNavBarVisible: " + BarUtils.isNavBarVisible(this)) - .appendLine("getNavBarColor: #" + Integer.toHexString(BarUtils.getNavBarColor(this))) - .append("isSupportNavBar: " + BarUtils.isSupportNavBar()) - .create() - ); - } else { - tvAboutNav.setText(new SpanUtils() - .appendLine("navHeight: " + BarUtils.getNavBarHeight()) - .appendLine("isNavBarVisible: " + BarUtils.isNavBarVisible(this)) - .append("isSupportNavBar: " + BarUtils.isSupportNavBar()) - .create() - ); - } - } - - @RequiresApi(api = Build.VERSION_CODES.KITKAT) - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - BarUtils.setNavBarVisibility(this, BarUtils.isNavBarVisible(this)); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarNotificationActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarNotificationActivity.java deleted file mode 100644 index 6cfecb221c..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarNotificationActivity.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.Handler; -import android.support.annotation.Nullable; -import android.view.View; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.BarUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about BarUtils - *- */ -public class BarNotificationActivity extends BaseBackActivity { - - private Handler mHandler = new Handler(); - - public static void start(Context context) { - Intent starter = new Intent(context, BarNotificationActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_notification; - } - - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_bar)); - - findViewById(R.id.btn_show_notification).setOnClickListener(this); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_show_notification: - BarUtils.setNotificationBarVisibility(true); - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - BarUtils.setNotificationBarVisibility(false); - } - }, 2000); - break; - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - mHandler.removeCallbacksAndMessages(null); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusActivity.java deleted file mode 100644 index 9b5fd56891..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusActivity.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.BarUtils; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about BarUtils - *- */ -public class BarStatusActivity extends BaseBackActivity { - - private TextView tvAboutStatus; - - public static void start(Context context) { - Intent starter = new Intent(context, BarStatusActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_status; - } - - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_bar)); - - tvAboutStatus = findViewById(R.id.tv_about_status); - findViewById(R.id.btn_show_status).setOnClickListener(this); - findViewById(R.id.btn_hide_status).setOnClickListener(this); - findViewById(R.id.btn_light_mode).setOnClickListener(this); - findViewById(R.id.btn_dark_mode).setOnClickListener(this); - updateAboutStatus(); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_show_status: - BarUtils.setStatusBarVisibility(this, true); - break; - case R.id.btn_hide_status: - BarUtils.setStatusBarVisibility(this, false); - break; - case R.id.btn_light_mode: - BarUtils.setStatusBarLightMode(this, true); - break; - case R.id.btn_dark_mode: - BarUtils.setStatusBarLightMode(this, false); - break; - } - updateAboutStatus(); - } - - private void updateAboutStatus() { - tvAboutStatus.setText(new SpanUtils() - .appendLine("statusHeight: " + BarUtils.getStatusBarHeight()) - .append("isStatusVisible: " + BarUtils.isStatusBarVisible(this)) - .create()); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusAlphaActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusAlphaActivity.java deleted file mode 100644 index 4bf4e3c2b4..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusAlphaActivity.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseActivity; -import com.blankj.utilcode.util.BarUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - *- */ -public class BarStatusAlphaActivity extends BaseActivity { - - private int mAlpha; - - private TextView mTvStatusAlpha; - private SeekBar sbChangeAlpha; - - public static void start(Context context) { - Intent starter = new Intent(context, BarStatusAlphaActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_status_alpha; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - mTvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - sbChangeAlpha.setOnSeekBarChangeListener(translucentListener); - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateStatusBar(); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener translucentListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - updateStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - private void updateStatusBar() { - BarUtils.setStatusBarAlpha(BarStatusAlphaActivity.this, mAlpha); - BarUtils.addMarginTopEqualStatusBarHeight(mTvStatusAlpha);// 其实这个只需要调用一次即可 - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusAlphaFragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusAlphaFragment.java deleted file mode 100644 index 3c430c3ffd..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusAlphaFragment.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseLazyFragment; -import com.blankj.utilcode.util.BarUtils; -import com.blankj.utilcode.util.LogUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - *- */ -public class BarStatusAlphaFragment extends BaseLazyFragment { - - private int mAlpha; - - private TextView mTvStatusAlpha; - private SeekBar sbChangeAlpha; - private View fakeStatusBar; - - - public static BarStatusAlphaFragment newInstance() { - return new BarStatusAlphaFragment(); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.fragment_bar_status_alpha; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - fakeStatusBar = findViewById(R.id.fake_status_bar); - mTvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - sbChangeAlpha.setOnSeekBarChangeListener(translucentListener); - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateFakeStatusBar(); - } - - @Override - public void doLazyBusiness() { - LogUtils.d("doLazyBusiness() called"); - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener translucentListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - updateFakeStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - public void updateFakeStatusBar() { - BarUtils.setStatusBarAlpha(fakeStatusBar, mAlpha); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusColorActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusColorActivity.java deleted file mode 100644 index bd978c2f9a..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusColorActivity.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.view.View; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.androidutilcode.base.BaseActivity; -import com.blankj.utilcode.util.BarUtils; - -import java.util.Random; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - *- */ -public class BarStatusColorActivity extends BaseActivity { - - private Random mRandom; - private int mColor; - private int mAlpha; - - private TextView mTvStatusAlpha; - private SeekBar sbChangeAlpha; - - public static void start(Context context) { - Intent starter = new Intent(context, BarStatusColorActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mRandom = new Random(); - mColor = ContextCompat.getColor(UtilsApp.getInstance(), R.color.colorPrimary); - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_status_color; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - findViewById(R.id.btn_random_color).setOnClickListener(this); - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - mTvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - sbChangeAlpha.setOnSeekBarChangeListener(colorListener); - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateStatusBar(); - } - - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_random_color: - mColor = 0xff000000 | mRandom.nextInt(0xffffff); - updateStatusBar(); - break; - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener colorListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - updateStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - private void updateStatusBar() { - BarUtils.setStatusBarColor(this, mColor, mAlpha); - BarUtils.addMarginTopEqualStatusBarHeight(mTvStatusAlpha);// 其实这个只需要调用一次即可 - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusColorFragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusColorFragment.java deleted file mode 100644 index c0c6a6faf7..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusColorFragment.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.view.View; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.androidutilcode.base.BaseLazyFragment; -import com.blankj.utilcode.util.BarUtils; -import com.blankj.utilcode.util.LogUtils; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - *- */ -public class BarStatusColorFragment extends BaseLazyFragment { - - private Random mRandom; - private int mColor; - private int mAlpha; - - private TextView mTvStatusAlpha; - private SeekBar sbChangeAlpha; - private View fakeStatusBar; - - public static BarStatusColorFragment newInstance() { - return new BarStatusColorFragment(); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mRandom = new Random(); - mColor = ContextCompat.getColor(UtilsApp.getInstance(), R.color.colorPrimary); - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.fragment_bar_status_color; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - fakeStatusBar = findViewById(R.id.fake_status_bar); - findViewById(R.id.btn_random_color).setOnClickListener(this); - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - mTvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - sbChangeAlpha.setOnSeekBarChangeListener(colorListener); - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateFakeStatusBar(); - } - - - @Override - public void doLazyBusiness() { - LogUtils.d("doLazyBusiness() called"); - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_random_color: - mColor = 0xff000000 | mRandom.nextInt(0xffffff); - updateFakeStatusBar(); - break; - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener colorListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - updateFakeStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - public void updateFakeStatusBar() { - BarUtils.setStatusBarColor(fakeStatusBar, mColor, mAlpha); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusCustomFragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusCustomFragment.java deleted file mode 100644 index 0d4b58cfc2..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusCustomFragment.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseLazyFragment; -import com.blankj.utilcode.util.BarUtils; -import com.blankj.utilcode.util.LogUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - *- */ -public class BarStatusCustomFragment extends BaseLazyFragment { - - private View fakeStatusBar; - - - public static BarStatusCustomFragment newInstance() { - return new BarStatusCustomFragment(); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.fragment_bar_status_custom; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - BarUtils.setStatusBarCustom(findViewById(R.id.fake_status_bar)); - } - - @Override - public void doLazyBusiness() { - LogUtils.d("doLazyBusiness() called"); - } - - @Override - public void onWidgetClick(View view) { - - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusDrawerActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusDrawerActivity.java deleted file mode 100644 index 5061099277..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusDrawerActivity.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.view.View; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.androidutilcode.base.BaseDrawerActivity; -import com.blankj.utilcode.util.BarUtils; - -import java.util.Random; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - *- */ -public class BarStatusDrawerActivity extends BaseDrawerActivity { - - private Random mRandom; - private int mColor; - private int mAlpha; - - private View fakeStatusBar; - private CheckBox cbAlpha; - private CheckBox cbFront; - private TextView tvStatusAlpha; - private SeekBar sbChangeAlpha; - private Button btnRandomColor; - - public static void start(Context context) { - Intent starter = new Intent(context, BarStatusDrawerActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mRandom = new Random(); - mColor = ContextCompat.getColor(UtilsApp.getInstance(), R.color.colorPrimary); - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_status_drawer; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - fakeStatusBar = findViewById(R.id.fake_status_bar); - cbAlpha = findViewById(R.id.cb_alpha); - cbFront = findViewById(R.id.cb_front); - btnRandomColor = findViewById(R.id.btn_random_color); - tvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - - cbAlpha.setOnCheckedChangeListener(mAlphaCheckedChangeListener); - cbFront.setOnCheckedChangeListener(mFrontCheckedChangeListener); - btnRandomColor.setOnClickListener(this); - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - sbChangeAlpha.setOnSeekBarChangeListener(mColorListener); - - tvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateStatusBar(); - } - - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_random_color: - mColor = 0xff000000 | mRandom.nextInt(0xffffff); - updateStatusBar(); - break; - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener mColorListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - tvStatusAlpha.setText(String.valueOf(mAlpha)); - updateStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - CompoundButton.OnCheckedChangeListener mAlphaCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked) { - btnRandomColor.setVisibility(View.GONE); - flActivityContainer.setBackgroundResource(R.drawable.bar_status_alpha_bg); - } else { - btnRandomColor.setVisibility(View.VISIBLE); - flActivityContainer.setBackgroundColor(Color.WHITE); - } - updateStatusBar(); - } - }; - - CompoundButton.OnCheckedChangeListener mFrontCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - updateStatusBar(); - } - }; - - private void updateStatusBar() { - if (cbAlpha.isChecked()) { - BarUtils.setStatusBarAlpha4Drawer(BarStatusDrawerActivity.this, rootLayout, fakeStatusBar, mAlpha, cbFront.isChecked()); - } else { - BarUtils.setStatusBarColor4Drawer(BarStatusDrawerActivity.this, rootLayout, fakeStatusBar, mColor, mAlpha, cbFront.isChecked()); - } - BarUtils.addMarginTopEqualStatusBarHeight(cbAlpha);// 其实这个只需要调用一次即可 - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusFragmentActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusFragmentActivity.java deleted file mode 100644 index 4d4285697d..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusFragmentActivity.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -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.MenuItem; -import android.view.View; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseActivity; - -import java.util.ArrayList; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - *- */ -public class BarStatusFragmentActivity extends BaseActivity { - - private int[] itemIds = new int[]{ - R.id.navigation_color, - R.id.navigation_alpha, - R.id.navigation_image_view, - R.id.navigation_custom - }; - - private ViewPager mVpStatusBar; - private BottomNavigationView navigation; - private ArrayList
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - *- */ -public class BarStatusImageViewActivity extends BaseActivity { - - private int mAlpha; - - private TextView mTvStatusAlpha; - private SeekBar sbChangeAlpha; - - public static void start(Context context) { - Intent starter = new Intent(context, BarStatusImageViewActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_status_image_view; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - mTvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - sbChangeAlpha.setOnSeekBarChangeListener(translucentListener); - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateStatusBar(); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener translucentListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - updateStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - private void updateStatusBar() { - BarUtils.setStatusBarAlpha(BarStatusImageViewActivity.this, mAlpha, true); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusImageViewFragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusImageViewFragment.java deleted file mode 100644 index 7f81597156..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusImageViewFragment.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseLazyFragment; -import com.blankj.utilcode.util.BarUtils; -import com.blankj.utilcode.util.LogUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - *- */ -public class BarStatusImageViewFragment extends BaseLazyFragment { - - private int mAlpha; - - private TextView mTvStatusAlpha; - private SeekBar sbChangeAlpha; - private View fakeStatusBar; - - public static BarStatusImageViewFragment newInstance() { - return new BarStatusImageViewFragment(); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.fragment_bar_status_image_view; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - fakeStatusBar = findViewById(R.id.fake_status_bar); - mTvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - sbChangeAlpha.setOnSeekBarChangeListener(translucentListener); - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateFakeStatusBar(); - } - - @Override - public void doLazyBusiness() { - LogUtils.d("doLazyBusiness() called"); - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener translucentListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - mTvStatusAlpha.setText(String.valueOf(mAlpha)); - updateFakeStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - public void updateFakeStatusBar() { - BarUtils.setStatusBarAlpha(fakeStatusBar, mAlpha); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusSwipeBackActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusSwipeBackActivity.java deleted file mode 100644 index df95f8f26d..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusSwipeBackActivity.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.blankj.androidutilcode.feature.core.bar; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.view.View; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.LinearLayout; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.androidutilcode.base.BaseActivity; -import com.blankj.utilcode.util.BarUtils; -import com.r0adkll.slidr.Slidr; - -import java.util.Random; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - *- */ -public class BarStatusSwipeBackActivity extends BaseActivity { - - private Random mRandom; - private int mColor; - private int mAlpha; - - private LinearLayout llContainer; - private CheckBox cbAlpha; - private TextView tvStatusAlpha; - private SeekBar sbChangeAlpha; - private Button btnRandomColor; - - public static void start(Context context) { - Intent starter = new Intent(context, BarStatusSwipeBackActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - mRandom = new Random(); - mColor = ContextCompat.getColor(UtilsApp.getInstance(), R.color.colorPrimary); - mAlpha = 112; - } - - @Override - public int bindLayout() { - return R.layout.activity_bar_status_swipe_back; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - Slidr.attach(this); - - llContainer = findViewById(R.id.ll_container); - cbAlpha = findViewById(R.id.cb_alpha); - btnRandomColor = findViewById(R.id.btn_random_color); - tvStatusAlpha = findViewById(R.id.tv_status_alpha); - sbChangeAlpha = findViewById(R.id.sb_change_alpha); - - cbAlpha.setOnCheckedChangeListener(mCheckedChangeListener); - btnRandomColor.setOnClickListener(this); - findViewById(R.id.btn_set_transparent).setOnClickListener(this); - sbChangeAlpha.setOnSeekBarChangeListener(mColorListener); - - tvStatusAlpha.setText(String.valueOf(mAlpha)); - - updateStatusBar(); - } - - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_random_color: - mColor = 0xff000000 | mRandom.nextInt(0xffffff); - updateStatusBar(); - break; - case R.id.btn_set_transparent: - sbChangeAlpha.setProgress(0); - break; - } - } - - private SeekBar.OnSeekBarChangeListener mColorListener = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mAlpha = progress; - tvStatusAlpha.setText(String.valueOf(mAlpha)); - updateStatusBar(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - CompoundButton.OnCheckedChangeListener mCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked) { - btnRandomColor.setVisibility(View.GONE); - llContainer.setBackgroundResource(R.drawable.bar_status_alpha_bg); - } else { - btnRandomColor.setVisibility(View.VISIBLE); - llContainer.setBackgroundColor(Color.WHITE); - } - updateStatusBar(); - } - }; - - private void updateStatusBar() { - if (cbAlpha.isChecked()) { - BarUtils.setStatusBarAlpha(this, mAlpha); - BarUtils.addMarginTopEqualStatusBarHeight(cbAlpha); - } else { - BarUtils.setStatusBarColor(this, mColor, mAlpha); - BarUtils.addMarginTopEqualStatusBarHeight(cbAlpha); - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/clean/CleanActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/clean/CleanActivity.java deleted file mode 100644 index b066801ede..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/clean/CleanActivity.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.blankj.androidutilcode.feature.core.clean; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.Environment; -import android.support.annotation.Nullable; -import android.view.View; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.CleanUtils; -import com.blankj.utilcode.util.SnackbarUtils; - -import java.io.File; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/29 - * desc : demo about CleanUtils - *- */ -public class CleanActivity extends BaseBackActivity { - - private View snackBarRootView; - private String internalCachePath; - private String internalFilesPath; - private String internalDbs; - private String internalSp; - private String externalCache; - - public static void start(Context context) { - Intent starter = new Intent(context, CleanActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_clean; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_clean)); - - snackBarRootView = findViewById(android.R.id.content); - findViewById(R.id.btn_clean_internal_cache).setOnClickListener(this); - findViewById(R.id.btn_clean_internal_files).setOnClickListener(this); - findViewById(R.id.btn_clean_internal_databases).setOnClickListener(this); - findViewById(R.id.btn_clean_internal_sp).setOnClickListener(this); - findViewById(R.id.btn_clean_external_cache).setOnClickListener(this); - - internalCachePath = getCacheDir().getPath(); - internalFilesPath = getFilesDir().getPath(); - internalDbs = getFilesDir().getParent() + File.separator + "databases"; - internalSp = getFilesDir().getParent() + File.separator + "shared_prefs"; - - if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { - externalCache = getExternalCacheDir().getAbsolutePath(); - } - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_clean_internal_cache: - showSnackbar(CleanUtils.cleanInternalCache(), internalCachePath); - break; - case R.id.btn_clean_internal_files: - showSnackbar(CleanUtils.cleanInternalFiles(), internalFilesPath); - break; - case R.id.btn_clean_internal_databases: - showSnackbar(CleanUtils.cleanInternalDbs(), internalDbs); - break; - case R.id.btn_clean_internal_sp: - showSnackbar(CleanUtils.cleanInternalSp(), internalSp); - break; - case R.id.btn_clean_external_cache: - showSnackbar(CleanUtils.cleanExternalCache(), externalCache); - break; - } - } - - private void showSnackbar(final boolean isSuccess, final String path) { - if (isSuccess) { - SnackbarUtils.with(snackBarRootView) - .setMessage("clean \"" + path + "\" dir success") - .setDuration(SnackbarUtils.LENGTH_LONG) - .showSuccess(); - } else { - SnackbarUtils.with(snackBarRootView) - .setMessage("clean \"" + path + "\" dir failed") - .setDuration(SnackbarUtils.LENGTH_LONG) - .showError(); - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/device/DeviceActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/device/DeviceActivity.java deleted file mode 100644 index 7525db7bb6..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/device/DeviceActivity.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.blankj.androidutilcode.feature.core.device; - -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.DeviceUtils; -import com.blankj.utilcode.util.SpanUtils; - -import java.util.Arrays; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about DeviceUtils - *- */ -public class DeviceActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, DeviceActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_device; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_device)); - - findViewById(R.id.btn_shutdown).setOnClickListener(this); - findViewById(R.id.btn_reboot).setOnClickListener(this); - findViewById(R.id.btn_reboot_to_recovery).setOnClickListener(this); - findViewById(R.id.btn_reboot_to_bootloader).setOnClickListener(this); - TextView tvAboutDevice = findViewById(R.id.tv_about_device); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - tvAboutDevice.setText(new SpanUtils() - .appendLine("isRoot: " + DeviceUtils.isDeviceRooted()) - .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()) - .append("getABIs: " + Arrays.asList(DeviceUtils.getABIs())) - .create() - ); - } else { - tvAboutDevice.setText(new SpanUtils() - .appendLine("isRoot: " + DeviceUtils.isDeviceRooted()) - .appendLine("getSDKVersionName: " + DeviceUtils.getSDKVersionName()) - .appendLine("getSDKVersionCode: " + DeviceUtils.getSDKVersionCode()) - .appendLine("getAndroidID: " + DeviceUtils.getAndroidID()) - .appendLine("getMacAddress: " + DeviceUtils.getMacAddress()) - .appendLine("getManufacturer: " + DeviceUtils.getManufacturer()) - .appendLine("getModel: " + DeviceUtils.getModel()) - .append("getABIs: " + Arrays.asList(DeviceUtils.getABIs())) - .create() - ); - } - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_shutdown: - DeviceUtils.shutdown(); - break; - case R.id.btn_reboot: - DeviceUtils.reboot(); - break; - case R.id.btn_reboot_to_recovery: - DeviceUtils.reboot2Recovery(); - break; - case R.id.btn_reboot_to_bootloader: - DeviceUtils.reboot2Bootloader(); - break; - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/ChildFragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/ChildFragment.java deleted file mode 100644 index 94b59ef5ac..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/ChildFragment.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.blankj.androidutilcode.feature.core.fragment; - -import android.graphics.Color; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseFragment; -import com.blankj.utilcode.util.FragmentUtils; -import com.blankj.utilcode.util.LogUtils; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 17/02/02 - * desc : demo about FragmentUtils - *- */ -public class ChildFragment extends BaseFragment - implements FragmentUtils.OnBackClickListener { - - private TextView tvAboutFragment; - - public static ChildFragment newInstance() { - Bundle args = new Bundle(); - ChildFragment fragment = new ChildFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.fragment_child; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - Random random = new Random(); - FragmentUtils.setBackgroundColor(this, Color.rgb(random.nextInt(256), random.nextInt(256), random.nextInt(256))); - findViewById(R.id.btn_show_about_fragment).setOnClickListener(this); - findViewById(R.id.btn_pop).setOnClickListener(this); - tvAboutFragment = findViewById(R.id.tv_about_fragment); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - tvAboutFragment.setText(""); - switch (view.getId()) { - case R.id.btn_show_about_fragment: - tvAboutFragment.setText("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(getFragmentManager())) - + "\ntopInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(getFragmentManager())) - + "\ntopShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(getFragmentManager())) - + "\ntopShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(getFragmentManager())) - + "\n---all of fragments---\n" - + FragmentUtils.getAllFragments(getFragmentManager()).toString() - + "\n----------------------\n\n" - + "---stack top---\n" - + FragmentUtils.getAllFragmentsInStack(getFragmentManager()).toString() - + "\n---stack bottom---\n\n" - ); - break; -// case R.id.btn_pop: -// FragmentUtils.popFragment(getFragmentManager()); -// break; - } - } - - @Override - public boolean onBackClick() { - LogUtils.d("demo2 onBackClick"); - return false; - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/DetailTransition.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/DetailTransition.java deleted file mode 100644 index 1893362676..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/DetailTransition.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.blankj.androidutilcode.feature.core.fragment; - -import android.content.Context; -import android.os.Build; -import android.support.annotation.RequiresApi; -import android.transition.ChangeBounds; -import android.transition.ChangeImageTransform; -import android.transition.ChangeTransform; -import android.transition.TransitionSet; -import android.util.AttributeSet; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 17/02/21 - * desc : demo about FragmentUtils - *- */ -@RequiresApi(Build.VERSION_CODES.LOLLIPOP) -public class DetailTransition extends TransitionSet { - public DetailTransition() { - init(); - } - - // 允许资源文件使用 - public DetailTransition(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - private void init() { - setOrdering(ORDERING_TOGETHER); - addTransition(new ChangeBounds()). - addTransition(new ChangeTransform()). - addTransition(new ChangeImageTransform()); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/FragmentActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/FragmentActivity.java deleted file mode 100644 index ec1c1a0349..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/FragmentActivity.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.blankj.androidutilcode.feature.core.fragment; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.PersistableBundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.BottomNavigationView; -import android.support.v4.app.Fragment; -import android.view.MenuItem; -import android.view.View; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseActivity; -import com.blankj.utilcode.util.FragmentUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 17/02/01 - * desc : demo about FragmentUtils - *- */ -public class FragmentActivity extends BaseActivity { - - private int[] itemIds = new int[]{ - R.id.navigation_fragment_zero, - R.id.navigation_fragment_one, - R.id.navigation_fragment_two - }; - - private BottomNavigationView navigation; - private Fragment[] mFragments = new Fragment[3]; - private int curIndex; - - public static void start(Context context) { - Intent starter = new Intent(context, FragmentActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_fragment; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - if (savedInstanceState != null) { - curIndex = savedInstanceState.getInt("curIndex"); - } - - navigation = findViewById(R.id.navigation_fragment); - navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); - - mFragments[0] = Root0Fragment.newInstance(); - mFragments[1] = Root1Fragment.newInstance(); - mFragments[2] = Root2Fragment.newInstance(); - FragmentUtils.add(getSupportFragmentManager(), mFragments, R.id.fragment_container, curIndex); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } - - -// @Override -// public void onBackPressed() { -// if (!FragmentUtils.dispatchBackPress(getSupportFragmentManager())) { -// super.onBackPressed(); -// } -// } - - private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener - = new BottomNavigationView.OnNavigationItemSelectedListener() { - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.navigation_fragment_zero: - showCurrentFragment(0); - return true; - case R.id.navigation_fragment_one: - showCurrentFragment(1); - return true; - case R.id.navigation_fragment_two: - showCurrentFragment(2); - return true; - } - return false; - } - }; - - private void showCurrentFragment(int index) { - FragmentUtils.showHide(curIndex = index, mFragments); - } - - @Override - public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { - super.onSaveInstanceState(outState, outPersistentState); - outState.putInt("curIndex", curIndex); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root0Fragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root0Fragment.java deleted file mode 100644 index a7048f6379..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root0Fragment.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.blankj.androidutilcode.feature.core.fragment; - -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.transition.Fade; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseFragment; -import com.blankj.utilcode.util.FragmentUtils; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 17/02/02 - * desc : demo about FragmentUtils - *- */ -public class Root0Fragment extends BaseFragment - implements FragmentUtils.OnBackClickListener { - - ImageView ivSharedElement; - TextView tvAboutFragment; - - public static Root0Fragment newInstance() { - Bundle args = new Bundle(); - Root0Fragment fragment = new Root0Fragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.fragment_root; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - Random random = new Random(); - FragmentUtils.setBackgroundColor(this, Color.rgb(random.nextInt(256), random.nextInt(256), random.nextInt(256))); - findViewById(R.id.btn_show_about_fragment).setOnClickListener(this); - findViewById(R.id.btn_add).setOnClickListener(this); - findViewById(R.id.btn_add_hide).setOnClickListener(this); - findViewById(R.id.btn_add_hide_stack).setOnClickListener(this); - findViewById(R.id.btn_add).setOnClickListener(this); - findViewById(R.id.btn_add_show).setOnClickListener(this); - findViewById(R.id.btn_add_child).setOnClickListener(this); - findViewById(R.id.btn_pop_to_root).setOnClickListener(this); - findViewById(R.id.btn_pop_add).setOnClickListener(this); - findViewById(R.id.btn_hide_show).setOnClickListener(this); - findViewById(R.id.btn_replace).setOnClickListener(this); - ivSharedElement = findViewById(R.id.iv_shared_element); - tvAboutFragment = findViewById(R.id.tv_about_fragment); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - tvAboutFragment.setText(""); - switch (view.getId()) { - case R.id.btn_show_about_fragment: - tvAboutFragment.setText("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(getFragmentManager())) - + "\ntopInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(getFragmentManager())) - + "\ntopShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(getFragmentManager())) - + "\ntopShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(getFragmentManager())) - + "\n---all of fragments---\n" - + FragmentUtils.getAllFragments(getFragmentManager()).toString() - + "\n----------------------\n\n" - + "---stack top---\n" - + FragmentUtils.getAllFragmentsInStack(getFragmentManager()).toString() - + "\n---stack bottom---\n\n" - ); - break; - case R.id.btn_add: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.child_fragment_container, - false, - true); - break; - case R.id.btn_add_hide: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container, - true); - break; - case R.id.btn_add_hide_stack: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container, - true, - true); - break; -// case R.id.btn_add_show: -// FragmentUtils.add(getFragmentManager(), -// addSharedElement(Demo1Fragment.newInstance()), -// R.id.fragment_container, -// false, -// false, -// sharedElement); -// break; -// case R.id.btn_add_child: -// FragmentUtils.add(getChildFragmentManager(), -// ChildFragment.newInstance(), -// R.id.child_fragment_container, -// false, -// true); -// break; -// case R.id.btn_pop_to_root: -// FragmentUtils.popToFragment(getFragmentManager(), -// Demo1Fragment.class, -// true); -// break; -// case R.id.btn_pop_add: -// FragmentUtils.popAddFragment(getFragmentManager(), -// addSharedElement(ChildFragment.newInstance()), -// R.id.fragment_container, -// true, -// sharedElement); -// break; -// case R.id.btn_hide_show: -// Fragment fragment1 = FragmentUtils.findFragment(getFragmentManager(), Demo1Fragment.class); -// if (fragment1 != null) { -// FragmentUtils.showHideFragment(this, fragment1); -// } else { -// ToastUtils.showLong("please add demo1 first!"); -// } -// break; -// case R.id.btn_replace: -// ((FragmentActivity) getActivity()).rootFragment = FragmentUtils.replaceFragment(this, addSharedElement(Demo3Fragment.newInstance()), false, sharedElement); -// break; - } - } - - private Fragment addSharedElement(Fragment fragment) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - fragment.setSharedElementEnterTransition(new DetailTransition()); - fragment.setEnterTransition(new Fade()); - fragment.setSharedElementReturnTransition(new DetailTransition()); - } - return fragment; - } - - @Override - public boolean onBackClick() { -// FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true); - return false; - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root1Fragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root1Fragment.java deleted file mode 100644 index cce86072d2..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root1Fragment.java +++ /dev/null @@ -1,164 +0,0 @@ -package com.blankj.androidutilcode.feature.core.fragment; - -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.transition.Fade; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseFragment; -import com.blankj.utilcode.util.FragmentUtils; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 17/02/02 - * desc : demo about FragmentUtils - *- */ -public class Root1Fragment extends BaseFragment - implements FragmentUtils.OnBackClickListener { - - ImageView ivSharedElement; - TextView tvAboutFragment; - - public static Root1Fragment newInstance() { - Bundle args = new Bundle(); - Root1Fragment fragment = new Root1Fragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.fragment_root; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - Random random = new Random(); - FragmentUtils.setBackgroundColor(this, Color.rgb(random.nextInt(256), random.nextInt(256), random.nextInt(256))); - findViewById(R.id.btn_show_about_fragment).setOnClickListener(this); - findViewById(R.id.btn_add).setOnClickListener(this); - findViewById(R.id.btn_add_hide).setOnClickListener(this); - findViewById(R.id.btn_add_hide_stack).setOnClickListener(this); - findViewById(R.id.btn_add).setOnClickListener(this); - findViewById(R.id.btn_add_show).setOnClickListener(this); - findViewById(R.id.btn_add_child).setOnClickListener(this); - findViewById(R.id.btn_pop_to_root).setOnClickListener(this); - findViewById(R.id.btn_pop_add).setOnClickListener(this); - findViewById(R.id.btn_hide_show).setOnClickListener(this); - findViewById(R.id.btn_replace).setOnClickListener(this); - ivSharedElement = findViewById(R.id.iv_shared_element); - tvAboutFragment = findViewById(R.id.tv_about_fragment); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - tvAboutFragment.setText(""); - switch (view.getId()) { - case R.id.btn_show_about_fragment: - tvAboutFragment.setText("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(getFragmentManager())) - + "\ntopInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(getFragmentManager())) - + "\ntopShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(getFragmentManager())) - + "\ntopShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(getFragmentManager())) - + "\n---all of fragments---\n" - + FragmentUtils.getAllFragments(getFragmentManager()).toString() - + "\n----------------------\n\n" - + "---stack top---\n" - + FragmentUtils.getAllFragmentsInStack(getFragmentManager()).toString() - + "\n---stack bottom---\n\n" - ); - break; - case R.id.btn_add: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container); - break; - case R.id.btn_add_hide: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container, - true); - break; - case R.id.btn_add_hide_stack: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container, - true, - true); - break; -// case R.id.btn_add_show: -// FragmentUtils.add(getFragmentManager(), -// addSharedElement(Demo1Fragment.newInstance()), -// R.id.fragment_container, -// false, -// false, -// sharedElement); -// break; -// case R.id.btn_add_child: -// FragmentUtils.add(getChildFragmentManager(), -// ChildFragment.newInstance(), -// R.id.child_fragment_container, -// false, -// true); -// break; -// case R.id.btn_pop_to_root: -// FragmentUtils.popToFragment(getFragmentManager(), -// Demo1Fragment.class, -// true); -// break; -// case R.id.btn_pop_add: -// FragmentUtils.popAddFragment(getFragmentManager(), -// addSharedElement(ChildFragment.newInstance()), -// R.id.fragment_container, -// true, -// sharedElement); -// break; -// case R.id.btn_hide_show: -// Fragment fragment1 = FragmentUtils.findFragment(getFragmentManager(), Demo1Fragment.class); -// if (fragment1 != null) { -// FragmentUtils.showHideFragment(this, fragment1); -// } else { -// ToastUtils.showLong("please add demo1 first!"); -// } -// break; -// case R.id.btn_replace: -// ((FragmentActivity) getActivity()).rootFragment = FragmentUtils.replaceFragment(this, addSharedElement(Demo3Fragment.newInstance()), false, sharedElement); -// break; - } - } - - private Fragment addSharedElement(Fragment fragment) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - fragment.setSharedElementEnterTransition(new DetailTransition()); - fragment.setEnterTransition(new Fade()); - fragment.setSharedElementReturnTransition(new DetailTransition()); - } - return fragment; - } - - @Override - public boolean onBackClick() { -// FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true); - return false; - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root2Fragment.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root2Fragment.java deleted file mode 100644 index 2a6bc6c3d5..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/fragment/Root2Fragment.java +++ /dev/null @@ -1,164 +0,0 @@ -package com.blankj.androidutilcode.feature.core.fragment; - -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.transition.Fade; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseFragment; -import com.blankj.utilcode.util.FragmentUtils; - -import java.util.Random; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 17/02/02 - * desc : demo about FragmentUtils - *- */ -public class Root2Fragment extends BaseFragment - implements FragmentUtils.OnBackClickListener { - - ImageView ivSharedElement; - TextView tvAboutFragment; - - public static Root2Fragment newInstance() { - Bundle args = new Bundle(); - Root2Fragment fragment = new Root2Fragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.fragment_root; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - Random random = new Random(); - FragmentUtils.setBackgroundColor(this, Color.rgb(random.nextInt(256), random.nextInt(256), random.nextInt(256))); - findViewById(R.id.btn_show_about_fragment).setOnClickListener(this); - findViewById(R.id.btn_add).setOnClickListener(this); - findViewById(R.id.btn_add_hide).setOnClickListener(this); - findViewById(R.id.btn_add_hide_stack).setOnClickListener(this); - findViewById(R.id.btn_add).setOnClickListener(this); - findViewById(R.id.btn_add_show).setOnClickListener(this); - findViewById(R.id.btn_add_child).setOnClickListener(this); - findViewById(R.id.btn_pop_to_root).setOnClickListener(this); - findViewById(R.id.btn_pop_add).setOnClickListener(this); - findViewById(R.id.btn_hide_show).setOnClickListener(this); - findViewById(R.id.btn_replace).setOnClickListener(this); - ivSharedElement = findViewById(R.id.iv_shared_element); - tvAboutFragment = findViewById(R.id.tv_about_fragment); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - tvAboutFragment.setText(""); - switch (view.getId()) { - case R.id.btn_show_about_fragment: - tvAboutFragment.setText("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(getFragmentManager())) - + "\ntopInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(getFragmentManager())) - + "\ntopShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(getFragmentManager())) - + "\ntopShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(getFragmentManager())) - + "\n---all of fragments---\n" - + FragmentUtils.getAllFragments(getFragmentManager()).toString() - + "\n----------------------\n\n" - + "---stack top---\n" - + FragmentUtils.getAllFragmentsInStack(getFragmentManager()).toString() - + "\n---stack bottom---\n\n" - ); - break; - case R.id.btn_add: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container); - break; - case R.id.btn_add_hide: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container, - true); - break; - case R.id.btn_add_hide_stack: - FragmentUtils.add(getFragmentManager(), - ChildFragment.newInstance(), - R.id.fragment_container, - true, - true); - break; -// case R.id.btn_add_show: -// FragmentUtils.add(getFragmentManager(), -// addSharedElement(Demo1Fragment.newInstance()), -// R.id.fragment_container, -// false, -// false, -// sharedElement); -// break; -// case R.id.btn_add_child: -// FragmentUtils.add(getChildFragmentManager(), -// ChildFragment.newInstance(), -// R.id.child_fragment_container, -// false, -// true); -// break; -// case R.id.btn_pop_to_root: -// FragmentUtils.popToFragment(getFragmentManager(), -// Demo1Fragment.class, -// true); -// break; -// case R.id.btn_pop_add: -// FragmentUtils.popAddFragment(getFragmentManager(), -// addSharedElement(ChildFragment.newInstance()), -// R.id.fragment_container, -// true, -// sharedElement); -// break; -// case R.id.btn_hide_show: -// Fragment fragment1 = FragmentUtils.findFragment(getFragmentManager(), Demo1Fragment.class); -// if (fragment1 != null) { -// FragmentUtils.showHideFragment(this, fragment1); -// } else { -// ToastUtils.showLong("please add demo1 first!"); -// } -// break; -// case R.id.btn_replace: -// ((FragmentActivity) getActivity()).rootFragment = FragmentUtils.replaceFragment(this, addSharedElement(Demo3Fragment.newInstance()), false, sharedElement); -// break; - } - } - - private Fragment addSharedElement(Fragment fragment) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - fragment.setSharedElementEnterTransition(new DetailTransition()); - fragment.setEnterTransition(new Fade()); - fragment.setSharedElementReturnTransition(new DetailTransition()); - } - return fragment; - } - - @Override - public boolean onBackClick() { -// FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true); - return false; - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/image/ImageActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/image/ImageActivity.java deleted file mode 100644 index acb8e8a251..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/image/ImageActivity.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.blankj.androidutilcode.feature.core.image; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.View; - -import com.blankj.androidutilcode.Config; -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseActivity; -import com.blankj.utilcode.util.ImageUtils; -import com.blankj.utilcode.util.ToastUtils; - -import java.util.ArrayList; -import java.util.List; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/26 - * desc : demo about ImageUtils - *- */ -public class ImageActivity extends BaseActivity { - - Bitmap src; - List
- * author: Blankj - * blog : http://blankj.com - * time : 2017/09/18 - * desc : demo about ImageUtils - *- */ -public class ImageAdapter extends SingleAdapter
- * author: Blankj - * blog : http://blankj.com - * time : 2017/09/18 - * desc : demo about ImageUtils - *- */ -public class ImageBean { - - int resId; - String name; - Bitmap image; - - public ImageBean(@StringRes int resId, Bitmap image) { - name = Utils.getApp().getString(resId); - this.image = image; - } - - public ImageBean(String name, Bitmap image) { - this.name = name; - this.image = image; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Bitmap getImage() { - return image; - } - - public void setImage(Bitmap image) { - this.image = image; - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/keyboard/KeyboardActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/keyboard/KeyboardActivity.java deleted file mode 100644 index c255c1c7be..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/keyboard/KeyboardActivity.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.blankj.androidutilcode.feature.core.keyboard; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AlertDialog; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.androidutilcode.helper.DialogHelper; -import com.blankj.utilcode.util.KeyboardUtils; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about KeyboardUtils - *- */ -public class KeyboardActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, KeyboardActivity.class); - context.startActivity(starter); - } - - TextView tvAboutKeyboard; - EditText etInput; - private AlertDialog dialog; - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_keyboard; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - KeyboardUtils.fixAndroidBug5497(this); - etInput = findViewById(R.id.et_input); - findViewById(R.id.btn_hide_soft_input).setOnClickListener(this); - findViewById(R.id.btn_show_soft_input).setOnClickListener(this); - findViewById(R.id.btn_toggle_soft_input).setOnClickListener(this); - findViewById(R.id.btn_keyboard_in_fragment).setOnClickListener(this); - tvAboutKeyboard = findViewById(R.id.tv_about_keyboard); - - KeyboardUtils.registerSoftInputChangedListener(this, - new KeyboardUtils.OnSoftInputChangedListener() { - @Override - public void onSoftInputChanged(int height) { - tvAboutKeyboard.setText(new SpanUtils() - .appendLine("isSoftInputVisible: " + KeyboardUtils.isSoftInputVisible(KeyboardActivity.this)) - .append("height: " + height) - .create() - ); - } - }); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_hide_soft_input: - KeyboardUtils.hideSoftInput(this); - break; - case R.id.btn_show_soft_input: - KeyboardUtils.showSoftInput(this); - break; - case R.id.btn_toggle_soft_input: - KeyboardUtils.toggleSoftInput(); - break; - case R.id.btn_keyboard_in_fragment: - DialogHelper.showKeyboardDialog(); - KeyboardUtils.showSoftInput(this); - break; - } - } - -// @Override -// public boolean dispatchTouchEvent(MotionEvent ev) { -// if (ev.getAction() == MotionEvent.ACTION_DOWN) { -// View v = getCurrentFocus(); -// if (isShouldHideKeyboard(v, ev)) { -// InputMethodManager imm = -// (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); -// if (imm == null) return super.dispatchTouchEvent(ev); -// imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); -// } -// } -// return super.dispatchTouchEvent(ev); -// } -// -// // 根据 EditText 所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘 -// private boolean isShouldHideKeyboard(View v, MotionEvent event) { -// if (v != null && (v instanceof EditText)) { -// int[] l = {0, 0}; -// v.getLocationInWindow(l); -// int left = l[0], -// top = l[1], -// bottom = top + v.getHeight(), -// right = left + v.getWidth(); -// return !(event.getX() > left && event.getX() < right -// && event.getY() > top && event.getY() < bottom); -// } -// return false; -// } - - @Override - protected void onDestroy() { - KeyboardUtils.unregisterSoftInputChangedListener(this); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/log/LogActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/log/LogActivity.java deleted file mode 100644 index fde5051c7b..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/log/LogActivity.java +++ /dev/null @@ -1,352 +0,0 @@ -package com.blankj.androidutilcode.feature.core.log; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.os.Environment; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.Config; -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.LogUtils; - -import java.util.ArrayList; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/03/22 - * desc : demo about LogUtils - *- */ -public class LogActivity extends BaseBackActivity { - - private static final String TAG = "CMJ"; - private static final int UPDATE_LOG = 0x01; - private static final int UPDATE_CONSOLE = 0x01 << 1; - private static final int UPDATE_TAG = 0x01 << 2; - private static final int UPDATE_HEAD = 0x01 << 3; - private static final int UPDATE_FILE = 0x01 << 4; - private static final int UPDATE_DIR = 0x01 << 5; - private static final int UPDATE_BORDER = 0x01 << 6; - private static final int UPDATE_SINGLE = 0x01 << 7; - private static final int UPDATE_CONSOLE_FILTER = 0x01 << 8; - private static final int UPDATE_FILE_FILTER = 0x01 << 9; - - private static final String JSON = "{\"tools\": [{ \"name\":\"css format\" , \"site\":\"http://tools.w3cschool.cn/code/css\" },{ \"name\":\"JSON format\" , \"site\":\"http://tools.w3cschool.cn/code/JSON\" },{ \"name\":\"pwd check\" , \"site\":\"http://tools.w3cschool.cn/password/my_password_safe\" }]}"; - private static final String XML = "
- * author: Blankj - * blog : http://blankj.com - * time : 2018/05/15 - * desc : demo about MetaDataUtils - *- */ -public class MetaDataActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, MetaDataActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_meta_data; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_meta_data)); - - TextView tvAboutMetaData = findViewById(R.id.tv_about_metadata); - tvAboutMetaData.setText(new SpanUtils() - .appendLine("getMetaDataInApp: " + MetaDataUtils.getMetaDataInApp("app_meta_data")) - .append("getMetaDataInActivity: " + MetaDataUtils.getMetaDataInActivity(this, "activity_meta_data")) - .create()); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/network/NetworkActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/network/NetworkActivity.java deleted file mode 100644 index 232d8333c1..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/network/NetworkActivity.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.blankj.androidutilcode.feature.core.network; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.NetworkUtils; -import com.blankj.utilcode.util.SpanUtils; -import com.blankj.utilcode.util.ThreadUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about NetworkUtils - *- */ -public class NetworkActivity extends BaseBackActivity { - - TextView tvAboutNetwork; - TextView tvAboutNetworkAsync; - ThreadUtils.SimpleTask mSimpleTask = new ThreadUtils.SimpleTask
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about PathUtils - *- */ -public class PathActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, PathActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_path; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_path)); - - TextView tvAboutMetaData = findViewById(R.id.tv_about_path); - tvAboutMetaData.setText(new SpanUtils() - .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()) - - .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()) - - .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()) - .append("") - .create()); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/permission/PermissionActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/permission/PermissionActivity.java deleted file mode 100644 index 8e92f82812..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/permission/PermissionActivity.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.blankj.androidutilcode.feature.core.permission; - -import android.Manifest; -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.androidutilcode.helper.DialogHelper; -import com.blankj.utilcode.constant.PermissionConstants; -import com.blankj.utilcode.util.LogUtils; -import com.blankj.utilcode.util.PermissionUtils; -import com.blankj.utilcode.util.ScreenUtils; -import com.blankj.utilcode.util.SpanUtils; - -import java.util.List; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/01/01 - * desc : demo about PermissionUtils - *- */ -public class PermissionActivity extends BaseBackActivity { - - TextView tvAboutPermission; - String permissions; - - public static void start(Context context) { - Intent starter = new Intent(context, PermissionActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_permission; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_permission)); - - tvAboutPermission = findViewById(R.id.tv_about_permission); - findViewById(R.id.btn_open_app_settings).setOnClickListener(this); - findViewById(R.id.btn_request_calendar).setOnClickListener(this); - findViewById(R.id.btn_request_record_audio).setOnClickListener(this); - findViewById(R.id.btn_request_calendar_and_record_audio).setOnClickListener(this); - - StringBuilder sb = new StringBuilder(); - for (String s : PermissionUtils.getPermissions()) { - sb.append(s.substring(s.lastIndexOf('.') + 1)).append("\n"); - } - permissions = sb.toString(); - } - - @Override - protected void onResume() { - super.onResume(); - updateAboutPermission(); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_open_app_settings: - PermissionUtils.launchAppDetailsSettings(); - break; - case R.id.btn_request_calendar: - PermissionUtils.permission(PermissionConstants.CALENDAR) - .rationale(new PermissionUtils.OnRationaleListener() { - @Override - public void rationale(final ShouldRequest shouldRequest) { - DialogHelper.showRationaleDialog(shouldRequest); - } - }) - .callback(new PermissionUtils.FullCallback() { - @Override - public void onGranted(List
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about PhoneUtils - *- */ -public class PhoneActivity extends BaseBackActivity { - - private TextView tvAboutPhone; - - public static void start(Context context) { - Intent starter = new Intent(context, PhoneActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_phone; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_phone)); - - findViewById(R.id.btn_dial).setOnClickListener(this); - findViewById(R.id.btn_call).setOnClickListener(this); - findViewById(R.id.btn_send_sms).setOnClickListener(this); - findViewById(R.id.btn_send_sms_silent).setOnClickListener(this); - tvAboutPhone = findViewById(R.id.tv_about_phone); - - PermissionHelper.requestPhone( - new PermissionHelper.OnPermissionGrantedListener() { - @SuppressLint("MissingPermission") - @Override - public void onPermissionGranted() { - tvAboutPhone.setText(new SpanUtils() - .appendLine("isPhone: " + PhoneUtils.isPhone()) - .appendLine("getDeviceId: " + PhoneUtils.getDeviceId()) - .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()) - .appendLine("getPhoneStatus: " + PhoneUtils.getPhoneStatus()) - .create()); - } - }, - new PermissionHelper.OnPermissionDeniedListener() { - @Override - public void onPermissionDenied() { - tvAboutPhone.setText(new SpanUtils() - .appendLine("isPhone: " + PhoneUtils.isPhone()) - .appendLine("getDeviceId: " + "need permission") - .appendLine("getIMEI: " + "need permission") - .appendLine("getMEID: " + "need permission") - .appendLine("getIMSI: " + "need permission") - .appendLine("getPhoneType: " + PhoneUtils.getPhoneType()) - .appendLine("isSimCardReady: " + PhoneUtils.isSimCardReady()) - .appendLine("getSimOperatorName: " + PhoneUtils.getSimOperatorName()) - .appendLine("getSimOperatorByMnc: " + PhoneUtils.getSimOperatorByMnc()) - .appendLine("getPhoneStatus: " + "need permission") - .create()); - } - } - ); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_dial: - PhoneUtils.dial("10000"); - break; - case R.id.btn_call: - PermissionHelper.requestPhone(new PermissionHelper.OnPermissionGrantedListener() { - @SuppressLint("MissingPermission") - @Override - public void onPermissionGranted() { - PhoneUtils.call("10000"); - } - }); - break; - case R.id.btn_send_sms: - PhoneUtils.sendSms("10000", "sendSms"); - break; - case R.id.btn_send_sms_silent: - PermissionHelper.requestSms(new PermissionHelper.OnPermissionGrantedListener() { - @SuppressLint("MissingPermission") - @Override - public void onPermissionGranted() { - PhoneUtils.sendSmsSilent("10000", "sendSmsSilent"); - } - }); - break; - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/process/ProcessActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/process/ProcessActivity.java deleted file mode 100644 index a262a23ec9..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/process/ProcessActivity.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.blankj.androidutilcode.feature.core.process; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.ProcessUtils; -import com.blankj.utilcode.util.SpanUtils; - -import java.util.Iterator; -import java.util.Set; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about ProcessUtils - *- */ -public class ProcessActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, ProcessActivity.class); - context.startActivity(starter); - } - - private TextView tvAboutProcess; - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_process; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_process)); - - findViewById(R.id.btn_kill_all_background_processes).setOnClickListener(this); - tvAboutProcess = findViewById(R.id.tv_about_process); - Set
- * author: Blankj - * blog : http://blankj.com - * time : 2018/01/29 - * desc : demo about ReflectUtils - *- */ -public class ReflectActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, ReflectActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_reflect; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_reflect)); - - TextView tvAboutReflect = findViewById(R.id.tv_about_reflect); - - tvAboutReflect.setText(new SpanUtils() - .appendLine("before reflect: " + ReflectUtils.reflect(TestPrivateStaticFinal.class).field("I1").get()) - .append("after reflect: " + ReflectUtils.reflect(TestPrivateStaticFinal.class).field("I1", 2).field("I1").get()) - .create()); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/reflect/TestPrivateStaticFinal.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/reflect/TestPrivateStaticFinal.java deleted file mode 100755 index 03c512d21c..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/reflect/TestPrivateStaticFinal.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.blankj.androidutilcode.feature.core.reflect; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/01/12 - * desc : demo about ReflectUtils - *- */ -public class TestPrivateStaticFinal { - private static final int I1 = 1; - - public static int getI1() { - return I1; - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/resource/ResourceActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/resource/ResourceActivity.java deleted file mode 100644 index e4d459abc6..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/resource/ResourceActivity.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.blankj.androidutilcode.feature.core.resource; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.Config; -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.ResourceUtils; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/05/07 - * desc : - *- */ -public class ResourceActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, ResourceActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_resource; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - findViewById(R.id.btn_resource_test_assets).setOnClickListener(this); - findViewById(R.id.btn_resource_test_raw).setOnClickListener(this); - TextView tvAboutResource = findViewById(R.id.tv_about_resource); - - tvAboutResource.setText(new SpanUtils() - .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 - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_resource_test_assets: - ResourceUtils.copyFileFromAssets("test", Config.CACHE_PATH + "/assets/test"); - break; - case R.id.btn_resource_test_raw: - ResourceUtils.copyFileFromRaw(R.raw.test, Config.CACHE_PATH + "/raw/test.txt"); - break; - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/sdcard/SDCardActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/sdcard/SDCardActivity.java deleted file mode 100644 index 1d61cac3c5..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/sdcard/SDCardActivity.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.blankj.androidutilcode.feature.core.sdcard; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.SDCardUtils; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about SDCardUtils - *- */ -public class SDCardActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, SDCardActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_sdcard; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_sdcard)); - - TextView tvAboutSdcard = findViewById(R.id.tv_about_sdcard); - tvAboutSdcard.setText(new SpanUtils() - .appendLine("isSDCardEnableByEnvironment: " + SDCardUtils.isSDCardEnableByEnvironment()) - .appendLine("getSDCardPathByEnvironment: " + SDCardUtils.getSDCardPathByEnvironment()) - .appendLine("isSDCardEnable: " + SDCardUtils.isSDCardEnable()) - .appendLine("getSDCardPaths: " + SDCardUtils.getSDCardPaths()) - .appendLine("getInnerSDCardPaths: " + SDCardUtils.getSDCardPaths(true)) - .appendLine("getOuterSDCardPaths: " + SDCardUtils.getSDCardPaths(false)) - .create() - ); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/snackbar/SnackbarActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/snackbar/SnackbarActivity.java deleted file mode 100644 index 080ae85b5e..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/snackbar/SnackbarActivity.java +++ /dev/null @@ -1,205 +0,0 @@ -package com.blankj.androidutilcode.feature.core.snackbar; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.text.SpannableStringBuilder; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.SnackbarUtils; -import com.blankj.utilcode.util.SpanUtils; -import com.blankj.utilcode.util.ToastUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/17 - * desc : demo about SnackbarUtils - *- */ -public class SnackbarActivity extends BaseBackActivity { - - View snackBarRootView; - - public static void start(Context context) { - Intent starter = new Intent(context, SnackbarActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_snackbar; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_snackbar)); - - snackBarRootView = findViewById(android.R.id.content); - findViewById(R.id.btn_short_snackbar).setOnClickListener(this); - findViewById(R.id.btn_short_snackbar_with_action).setOnClickListener(this); - findViewById(R.id.btn_long_snackbar).setOnClickListener(this); - findViewById(R.id.btn_long_snackbar_with_action).setOnClickListener(this); - findViewById(R.id.btn_indefinite_snackbar).setOnClickListener(this); - findViewById(R.id.btn_indefinite_snackbar_with_action).setOnClickListener(this); - findViewById(R.id.btn_add_view).setOnClickListener(this); - findViewById(R.id.btn_add_view_with_action).setOnClickListener(this); - findViewById(R.id.btn_show_success).setOnClickListener(this); - findViewById(R.id.btn_show_warning).setOnClickListener(this); - findViewById(R.id.btn_show_error).setOnClickListener(this); - findViewById(R.id.btn_dismiss_snackbar).setOnClickListener(this); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_short_snackbar: - SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_short)) - .setMessageColor(Color.WHITE) - .setBgResource(R.drawable.snackbar_custom_bg) - .show(); - break; - - case R.id.btn_short_snackbar_with_action: - 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, new View.OnClickListener() { - @Override - public void onClick(View v) { - ToastUtils.showShort(getString(R.string.snackbar_click)); - } - }) - .show(); - break; - - case R.id.btn_long_snackbar: - SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_long)) - .setMessageColor(Color.WHITE) - .setDuration(SnackbarUtils.LENGTH_LONG) - .setBgResource(R.drawable.snackbar_custom_bg) - .show(); - break; - - case R.id.btn_long_snackbar_with_action: - 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, new View.OnClickListener() { - @Override - public void onClick(View v) { - ToastUtils.showShort(getString(R.string.snackbar_click)); - } - }) - .show(); - break; - - case R.id.btn_indefinite_snackbar: - SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_indefinite)) - .setMessageColor(Color.WHITE) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .setBgResource(R.drawable.snackbar_custom_bg) - .show(); - break; - - case R.id.btn_indefinite_snackbar_with_action: - 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, new View.OnClickListener() { - @Override - public void onClick(View v) { - ToastUtils.showShort(getString(R.string.snackbar_click)); - } - }) - .show(); - break; - - case R.id.btn_add_view: - ViewGroup.LayoutParams params = new 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); - break; - - case R.id.btn_add_view_with_action: - SnackbarUtils.with(snackBarRootView) - .setBgColor(Color.TRANSPARENT) - .setDuration(SnackbarUtils.LENGTH_INDEFINITE) - .show(); - params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT); - SnackbarUtils.addView(R.layout.snackbar_custom, params); - View snackbarView = SnackbarUtils.getView(); - if (snackbarView != null) { - TextView tvSnackbarCustom = snackbarView.findViewById(R.id.tv_snackbar_custom); - tvSnackbarCustom.setText("点我可消失"); - snackbarView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - SnackbarUtils.dismiss(); - } - }); - } - break; - - case R.id.btn_show_success: - SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_success)) - .showSuccess(); - break; - - case R.id.btn_show_warning: - SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_warning)) - .showWarning(); - break; - - case R.id.btn_show_error: - SnackbarUtils.with(snackBarRootView) - .setMessage(getMsg(R.string.snackbar_error)) - .showError(); - break; - - case R.id.btn_dismiss_snackbar: - SnackbarUtils.dismiss(); - break; - } - } - - private SpannableStringBuilder getMsg(@StringRes int resId) { - return new SpanUtils() - .appendImage(R.mipmap.ic_launcher, SpanUtils.ALIGN_CENTER) - .appendSpace(32) - .append(getString(resId)).setFontSize(24, true) - .create(); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/sp/SPActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/sp/SPActivity.java deleted file mode 100644 index 4bb0181913..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/sp/SPActivity.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.blankj.androidutilcode.feature.core.sp; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.androidutilcode.data.DataManager; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/01/08 - * desc : demo about SPUtils - *- */ -public class SPActivity extends BaseBackActivity { - - private TextView tvAboutSp; - - public static void start(Context context) { - Intent starter = new Intent(context, SPActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_sp; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - tvAboutSp = findViewById(R.id.tv_about_sp); - findViewById(R.id.btn_sp_put_string).setOnClickListener(this); - findViewById(R.id.btn_sp_put_int).setOnClickListener(this); - findViewById(R.id.btn_sp_put_long).setOnClickListener(this); - findViewById(R.id.btn_sp_put_float).setOnClickListener(this); - findViewById(R.id.btn_sp_put_boolean).setOnClickListener(this); - findViewById(R.id.btn_sp_clear).setOnClickListener(this); - } - - @Override - public void doBusiness() { - updateAboutSp(); - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_sp_put_string: - DataManager.putString(); - break; - case R.id.btn_sp_put_int: - DataManager.putInt(); - break; - case R.id.btn_sp_put_long: - DataManager.putLong(); - break; - case R.id.btn_sp_put_float: - DataManager.putFloat(); - break; - case R.id.btn_sp_put_boolean: - DataManager.putBoolean(); - break; - case R.id.btn_sp_clear: - DataManager.clear(); - break; - } - updateAboutSp(); - } - - private void updateAboutSp() { - tvAboutSp.setText(DataManager.sp2String()); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/BlurMaskFilterSpan.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/span/BlurMaskFilterSpan.java deleted file mode 100644 index 029d42706e..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/BlurMaskFilterSpan.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.blankj.androidutilcode.feature.core.span; - -import android.graphics.BlurMaskFilter; -import android.graphics.MaskFilter; -import android.text.TextPaint; -import android.text.style.CharacterStyle; -import android.text.style.UpdateAppearance; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about SpanUtils - *- */ -public class BlurMaskFilterSpan extends CharacterStyle implements UpdateAppearance { - - private float mRadius; - private MaskFilter mFilter; - - public BlurMaskFilterSpan(float radius) { - mRadius = radius; - } - - public void setRadius(float radius) { - mRadius = radius; - mFilter = new BlurMaskFilter(mRadius, BlurMaskFilter.Blur.NORMAL); - } - - public float getRadius() { - return mRadius; - } - - @Override - public void updateDrawState(TextPaint ds) { - ds.setMaskFilter(mFilter); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/ForegroundAlphaColorSpan.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/span/ForegroundAlphaColorSpan.java deleted file mode 100644 index 5b1c5026a2..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/ForegroundAlphaColorSpan.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.blankj.androidutilcode.feature.core.span; - -import android.graphics.Color; -import android.support.annotation.ColorInt; -import android.text.TextPaint; -import android.text.style.CharacterStyle; -import android.text.style.UpdateAppearance; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about SpanUtils - *- */ -public class ForegroundAlphaColorSpan extends CharacterStyle - implements UpdateAppearance { - - private int mColor; - - public ForegroundAlphaColorSpan(@ColorInt int color) { - mColor = color; - } - - public void setAlpha(int alpha) { - mColor = Color.argb(alpha, Color.red(mColor), Color.green(mColor), Color.blue(mColor)); - } - - @Override - public void updateDrawState(TextPaint ds) { - ds.setColor(mColor); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/ForegroundAlphaColorSpanGroup.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/span/ForegroundAlphaColorSpanGroup.java deleted file mode 100644 index 86df9615df..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/ForegroundAlphaColorSpanGroup.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.blankj.androidutilcode.feature.core.span; - -import java.util.ArrayList; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about SpanUtils - *- */ -public class ForegroundAlphaColorSpanGroup { - - private final float mAlpha; - - private final ArrayList
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about SpanUtils - *- */ -public class ShadowSpan extends CharacterStyle implements UpdateAppearance { - private float radius; - private float dx; - private float dy; - private int shadowColor; - - public ShadowSpan(float radius, float dx, float dy, int shadowColor) { - this.radius = radius; - this.dx = dx; - this.dy = dy; - this.shadowColor = shadowColor; - } - - public float getDx() { - return dx; - } - - public void setDx(float dx) { - this.dx = dx; - } - - public float getDy() { - return dy; - } - - public void setDy(float dy) { - this.dy = dy; - } - - @Override - public void updateDrawState(TextPaint tp) { - tp.setShadowLayer(radius, dx, dy, shadowColor); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/SpanActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/span/SpanActivity.java deleted file mode 100644 index 833659d2a4..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/SpanActivity.java +++ /dev/null @@ -1,268 +0,0 @@ -package com.blankj.androidutilcode.feature.core.span; - -import android.animation.ValueAnimator; -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.graphics.LinearGradient; -import android.graphics.Matrix; -import android.graphics.Shader; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.text.SpannableStringBuilder; -import android.text.TextPaint; -import android.text.method.LinkMovementMethod; -import android.text.style.ClickableSpan; -import android.view.View; -import android.view.animation.LinearInterpolator; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.SpanUtils; -import com.blankj.utilcode.util.ToastUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : demo about SpanUtils - *- */ -public class SpanActivity extends BaseBackActivity { - - SpanUtils mSpanUtils; - SpannableStringBuilder animSsb; - - int lineHeight; - float textSize; - ValueAnimator valueAnimator; - Shader mShader; - float mShaderWidth; - Matrix matrix; - - BlurMaskFilterSpan mBlurMaskFilterSpan; - - ShadowSpan mShadowSpan; - - ForegroundAlphaColorSpan mForegroundAlphaColorSpan; - - ForegroundAlphaColorSpanGroup mForegroundAlphaColorSpanGroup; - - String mPrinterString; - - - float density; - TextView tvAboutSpan; - TextView tvAboutAnimSpan; - - public static void start(Context context) { - Intent starter = new Intent(context, SpanActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_span; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_span)); - - ClickableSpan clickableSpan = new ClickableSpan() { - @Override - public void onClick(View widget) { - ToastUtils.showShort("事件触发了"); - } - - @Override - public void updateDrawState(TextPaint ds) { - ds.setColor(Color.BLUE); - ds.setUnderlineText(false); - } - }; - - tvAboutSpan = findViewById(R.id.tv_about_span); - tvAboutAnimSpan = findViewById(R.id.tv_about_anim_span); - - // 响应点击事件的话必须设置以下属性 - tvAboutSpan.setMovementMethod(LinkMovementMethod.getInstance()); - // 去掉点击事件后的高亮 - tvAboutSpan.setHighlightColor(ContextCompat.getColor(this, android.R.color.transparent)); - lineHeight = tvAboutSpan.getLineHeight(); - textSize = tvAboutSpan.getTextSize(); - density = getResources().getDisplayMetrics().density; - -// initAnimSpan(); -// startAnim(); - - - tvAboutSpan.setText(new SpanUtils() -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_TOP) -// .append("大图").setBackgroundColor(Color.LTGRAY) -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_TOP) -// .append("顶部").setBackgroundColor(Color.LTGRAY) -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_TOP) -// .appendLine("对齐").setBackgroundColor(Color.LTGRAY) -// -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_CENTER) -// .append("大图").setBackgroundColor(Color.GREEN) -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_CENTER) -// .append("居中").setBackgroundColor(Color.GREEN) -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_CENTER) -// .appendLine("对齐").setBackgroundColor(Color.GREEN) -// -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_BOTTOM) -// .append("大图").setBackgroundColor(Color.LTGRAY) -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_BOTTOM) -// .append("底部").setBackgroundColor(Color.LTGRAY) -// .appendImage(R.drawable.shape_spannable_block_high, SpanUtils.ALIGN_BOTTOM) -// .appendLine("对齐").setBackgroundColor(Color.LTGRAY) -// -// .appendLine("SpanUtils").setBackgroundColor(Color.LTGRAY).setBold().setForegroundColor(Color.YELLOW).setAlign(Layout.Alignment.ALIGN_CENTER) -// .appendLine("前景色").setForegroundColor(Color.GREEN) -// .appendLine("背景色").setBackgroundColor(Color.LTGRAY) - .append("行高顶部对齐").setLineHeight(3 * lineHeight, SpanUtils.ALIGN_TOP).setFontSize(20).setBackgroundColor(Color.GREEN) - .append("行高").setLineHeight(3 * lineHeight, SpanUtils.ALIGN_CENTER).setFontSize(40).setBackgroundColor(Color.LTGRAY) - .appendLine("行高顶部").setLineHeight(3 * lineHeight, SpanUtils.ALIGN_BOTTOM).setFontSize(60).setBackgroundColor(Color.LTGRAY) - .append("行高").setFontSize(100).setBackgroundColor(Color.GREEN) - .append("行高").setFontSize(20).setBackgroundColor(Color.LTGRAY).setUnderline().setVerticalAlign(SpanUtils.ALIGN_CENTER) -// .appendLine("行高居中对齐").setLineHeight(2 * lineHeight, SpanUtils.ALIGN_CENTER).setBackgroundColor(Color.LTGRAY) -// .appendLine("行高底部对齐").setLineHeight(2 * lineHeight, SpanUtils.ALIGN_BOTTOM).setBackgroundColor(Color.GREEN) -// .appendLine("测试段落缩,首行缩进两字,其他行不缩进").setLeadingMargin((int) textSize * 2, 10).setBackgroundColor(Color.GREEN) -// .appendLine("测试引用,后面的字是为了凑到两行的效果").setQuoteColor(Color.GREEN, 10, 10).setBackgroundColor(Color.LTGRAY) -// .appendLine("测试列表项,后面的字是为了凑到两行的效果").setBullet(Color.GREEN, 20, 10).setBackgroundColor(Color.LTGRAY).setBackgroundColor(Color.GREEN) -// .appendLine("32dp 字体").setFontSize(32, true) -// .appendLine("2 倍字体").setFontProportion(2) -// .appendLine("横向 2 倍字体").setFontXProportion(1.5f) -// .appendLine("删除线").setStrikethrough() -// .appendLine("下划线").setUnderline() -// .append("测试").appendLine("上标").setSuperscript() -// .append("测试").appendLine("下标").setSubscript() -// .appendLine("粗体").setBold() -// .appendLine("斜体").setItalic() -// .appendLine("粗斜体").setBoldItalic() -// .appendLine("monospace 字体").setFontFamily("monospace") -// .appendLine("自定义字体").setTypeface(Typeface.createFromAsset(getAssets(), "fonts/dnmbhs.ttf")) -// .appendLine("相反对齐").setAlign(Layout.Alignment.ALIGN_OPPOSITE) -// .appendLine("居中对齐").setAlign(Layout.Alignment.ALIGN_CENTER) -// .appendLine("正常对齐").setAlign(Layout.Alignment.ALIGN_NORMAL) -// .append("测试").appendLine("点击事件").setClickSpan(clickableSpan) -// .append("测试").appendLine("Url").setUrl("https://github.com/Blankj/AndroidUtilCode") -// .append("测试").appendLine("模糊").setBlur(3, BlurMaskFilter.Blur.NORMAL) -// .appendLine("颜色渐变").setShader(new LinearGradient(0, 0, -// 64 * density * 4, 0, -// getResources().getIntArray(R.array.rainbow), -// null, -// Shader.TileMode.REPEAT)).setFontSize(64, true) -// .appendLine("图片着色").setFontSize(64, true).setShader(new BitmapShader(BitmapFactory.decodeResource(getResources(), R.drawable.span_cheetah), -// Shader.TileMode.REPEAT, -// Shader.TileMode.REPEAT)) -// .appendLine("阴影效果").setFontSize(64, true).setBackgroundColor(Color.BLACK).setShadow(24, 8, 8, Color.WHITE) -// -// .append("小图").setBackgroundColor(Color.GREEN) -// .appendImage(R.drawable.shape_spannable_block_low, SpanUtils.ALIGN_TOP) -// .append("顶部").setBackgroundColor(Color.GREEN) -// .appendImage(R.drawable.shape_spannable_block_low, SpanUtils.ALIGN_CENTER) -// .append("居中").setBackgroundColor(Color.GREEN) -// .appendImage(R.drawable.shape_spannable_block_low, SpanUtils.ALIGN_BASELINE) -// .append("底部").setBackgroundColor(Color.GREEN) -// .appendImage(R.drawable.shape_spannable_block_low, SpanUtils.ALIGN_BOTTOM) -// .appendLine("对齐").setBackgroundColor(Color.GREEN) -// -// .append("测试空格").appendSpace(30, Color.LTGRAY).appendSpace(50, Color.GREEN).appendSpace(100).appendSpace(30, Color.LTGRAY).appendSpace(50, Color.GREEN) - .create()); - } - - private void initAnimSpan() { - mShaderWidth = 64 * density * 4; - mShader = new LinearGradient(0, 0, - mShaderWidth, 0, - getResources().getIntArray(R.array.rainbow), - null, - Shader.TileMode.REPEAT); - matrix = new Matrix(); - - mBlurMaskFilterSpan = new BlurMaskFilterSpan(25); - - mShadowSpan = new ShadowSpan(8, 8, 8, Color.WHITE); - - mForegroundAlphaColorSpan = new ForegroundAlphaColorSpan(Color.TRANSPARENT); - - mForegroundAlphaColorSpanGroup = new ForegroundAlphaColorSpanGroup(0); - - mPrinterString = "打印动画,后面的文字是为了测试打印效果..."; - - mSpanUtils = new SpanUtils() - .appendLine("彩虹动画").setFontSize(64, true).setShader(mShader) - .appendLine("模糊动画").setFontSize(64, true).setSpans(mBlurMaskFilterSpan) - .appendLine("阴影动画").setFontSize(64, true).setBackgroundColor(Color.BLACK).setSpans(mShadowSpan) - .appendLine("透明动画").setFontSize(64, true).setSpans(mForegroundAlphaColorSpan); - for (int i = 0, len = mPrinterString.length(); i < len; ++i) { - ForegroundAlphaColorSpan span = new ForegroundAlphaColorSpan(Color.TRANSPARENT); - mSpanUtils.append(mPrinterString.substring(i, i + 1)).setSpans(span); - mForegroundAlphaColorSpanGroup.addSpan(span); - } - animSsb = mSpanUtils.create(); - } - - private void startAnim() { - valueAnimator = ValueAnimator.ofFloat(0, 1); - valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - // shader - matrix.reset(); - matrix.setTranslate((Float) animation.getAnimatedValue() * mShaderWidth, 0); - mShader.setLocalMatrix(matrix); - - // blur - mBlurMaskFilterSpan.setRadius(25 * (1.00001f - (Float) animation.getAnimatedValue())); - - // shadow - mShadowSpan.setDx(16 * (0.5f - (Float) animation.getAnimatedValue())); - mShadowSpan.setDy(16 * (0.5f - (Float) animation.getAnimatedValue())); - - // alpha - mForegroundAlphaColorSpan.setAlpha((int) (255 * (Float) animation.getAnimatedValue())); - - // printer - mForegroundAlphaColorSpanGroup.setAlpha((Float) animation.getAnimatedValue()); - - // update - tvAboutAnimSpan.setText(animSsb); - } - }); - - valueAnimator.setInterpolator(new LinearInterpolator()); - valueAnimator.setDuration(600 * 3); - valueAnimator.setRepeatCount(ValueAnimator.INFINITE); - valueAnimator.start(); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } - - @Override - protected void onDestroy() { - if (valueAnimator != null && valueAnimator.isRunning()) { - valueAnimator.cancel(); - } - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/toast/CustomToast.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/toast/CustomToast.java deleted file mode 100644 index 5a2cf8a6e8..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/toast/CustomToast.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.blankj.androidutilcode.feature.core.toast; - -import android.os.Handler; -import android.os.Looper; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.widget.TextView; -import android.widget.Toast; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.utilcode.util.ToastUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/08/31 - * desc : demo about ToastUtils - *- */ -public class CustomToast { - - private static final Handler HANDLER = new Handler(Looper.getMainLooper()); - - public static void showShort(@NonNull final CharSequence text) { - show(text, Toast.LENGTH_SHORT); - } - - public static void showShort(@StringRes final int resId) { - show(resId, Toast.LENGTH_SHORT); - } - - public static void showShort(@StringRes final int resId, final Object... args) { - show(resId, Toast.LENGTH_SHORT, args); - } - - public static void showShort(final String format, final Object... args) { - show(format, Toast.LENGTH_SHORT, args); - } - - public static void showLong(@NonNull final CharSequence text) { - show(text, Toast.LENGTH_LONG); - } - - public static void showLong(@StringRes final int resId) { - show(resId, Toast.LENGTH_LONG); - } - - public static void showLong(@StringRes final int resId, final Object... args) { - show(resId, Toast.LENGTH_LONG, args); - } - - public static void showLong(final String format, final Object... args) { - show(format, Toast.LENGTH_LONG, args); - } - - private static void show(@StringRes final int resId, final int duration) { - show(UtilsApp.getInstance().getResources().getString(resId), duration); - } - - private static void show(@StringRes final int resId, final int duration, final Object... args) { - show(String.format(UtilsApp.getInstance().getResources().getString(resId), args), duration); - } - - private static void show(final String format, final int duration, final Object... args) { - show(String.format(format, args), duration); - } - - private static void show(final CharSequence text, final int duration) { - HANDLER.post(new Runnable() { - @Override - public void run() { - TextView toastView; - if (duration == Toast.LENGTH_SHORT) { - toastView = (TextView) ToastUtils.showCustomShort(R.layout.toast_custom); - } else { - toastView = (TextView) ToastUtils.showCustomLong(R.layout.toast_custom); - } - toastView.setText(text); - } - }); - } - - public static void cancel() { - ToastUtils.cancel(); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/toast/ToastActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/toast/ToastActivity.java deleted file mode 100644 index cef8ded48f..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/toast/ToastActivity.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.blankj.androidutilcode.feature.core.toast; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.view.Gravity; -import android.view.View; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.SpanUtils; -import com.blankj.utilcode.util.ToastUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/29 - * desc : demo about ToastUtils - *- */ -public class ToastActivity extends BaseBackActivity { - - View toastView; - - public static void start(Context context) { - Intent starter = new Intent(context, ToastActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_toast; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_toast)); - - findViewById(R.id.btn_show_short_toast).setOnClickListener(this); - findViewById(R.id.btn_show_long_toast).setOnClickListener(this); - findViewById(R.id.btn_show_green_font).setOnClickListener(this); - findViewById(R.id.btn_show_bg_color).setOnClickListener(this); - findViewById(R.id.btn_show_bg_resource).setOnClickListener(this); - findViewById(R.id.btn_show_span).setOnClickListener(this); - findViewById(R.id.btn_show_custom_view).setOnClickListener(this); - findViewById(R.id.btn_show_middle).setOnClickListener(this); - findViewById(R.id.btn_cancel_toast).setOnClickListener(this); - toastView = findViewById(R.id.btn_cancel_toast); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - resetToast(); - switch (view.getId()) { - case R.id.btn_show_short_toast: - new Thread(new Runnable() { - @Override - public void run() { - ToastUtils.showShort(R.string.toast_short); - } - }).start(); - break; - case R.id.btn_show_long_toast: - new Thread(new Runnable() { - @Override - public void run() { - ToastUtils.showLong(R.string.toast_long); - } - }).start(); - break; - case R.id.btn_show_green_font: - ToastUtils.setMsgColor(Color.GREEN); - ToastUtils.showLong(R.string.toast_green_font); - break; - case R.id.btn_show_bg_color: - ToastUtils.setBgColor(ContextCompat.getColor(this, R.color.colorAccent)); - ToastUtils.showLong(R.string.toast_bg_color); - break; - case R.id.btn_show_bg_resource: - ToastUtils.setBgResource(R.drawable.toast_shape_round_rect); - ToastUtils.showLong(R.string.toast_custom_bg); - break; - case R.id.btn_show_span: - ToastUtils.showLong(new SpanUtils() - .appendImage(R.mipmap.ic_launcher, SpanUtils.ALIGN_CENTER) - .appendSpace(32) - .append(getString(R.string.toast_span)).setFontSize(24, true) - .create() - ); - break; - case R.id.btn_show_custom_view: - new Thread(new Runnable() { - @Override - public void run() { - CustomToast.showLong(R.string.toast_custom_view); - } - }).start(); - break; - case R.id.btn_show_middle: - ToastUtils.setGravity(Gravity.CENTER, 0, 0); - ToastUtils.showLong(R.string.toast_middle); - break; - case R.id.btn_cancel_toast: - ToastUtils.cancel(); - break; - } - } - - @Override - protected void onDestroy() { - resetToast(); - super.onDestroy(); - } - - private void resetToast() { - ToastUtils.setMsgColor(0xFEFFFFFF); - ToastUtils.setBgColor(0xFEFFFFFF); - ToastUtils.setBgResource(-1); - ToastUtils.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, getResources().getDimensionPixelSize(R.dimen.offset_64)); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/sub/SubUtilActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/sub/SubUtilActivity.java deleted file mode 100644 index ffca01e93f..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/sub/SubUtilActivity.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.blankj.androidutilcode.feature.sub; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.androidutilcode.feature.sub.brightness.BrightnessActivity; -import com.blankj.androidutilcode.feature.sub.flashlight.FlashlightActivity; -import com.blankj.androidutilcode.feature.sub.location.LocationActivity; -import com.blankj.androidutilcode.feature.sub.pinyin.PinyinActivity; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/29 - * desc : MainActivity - *- */ -public class SubUtilActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, SubUtilActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_util_sub; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.sub_util)); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } - - public void brightnessClick(View view) { - BrightnessActivity.start(this); - } - - public void flashlightClick(View view) { - FlashlightActivity.start(this); - } - - public void locationClick(View view) { - LocationActivity.start(this); - } - - public void pinyinClick(View view) { - PinyinActivity.start(this); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/sub/brightness/BrightnessActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/sub/brightness/BrightnessActivity.java deleted file mode 100644 index f67e31fd3e..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/sub/brightness/BrightnessActivity.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.blankj.androidutilcode.feature.sub.brightness; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.provider.Settings; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.SeekBar; -import android.widget.TextView; -import android.widget.ToggleButton; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseActivity; -import com.blankj.subutil.util.BrightnessUtils; -import com.blankj.subutil.util.Utils; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/02/08 - * desc : demo about BrightnessUtils - *- */ -public class BrightnessActivity extends BaseActivity { - - TextView tvBrightness; - SeekBar sbBrightness; - TextView tvWindowBrightness; - SeekBar sbWindowBrightness; - ToggleButton tbAutoBrightness; - - private SeekBar.OnSeekBarChangeListener brightnessChangeListener - = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - BrightnessUtils.setBrightness(progress); - updateBrightness(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - private SeekBar.OnSeekBarChangeListener windowBrightnessChangeListener - = new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - BrightnessUtils.setWindowBrightness(getWindow(), progress); - updateWindowBrightness(); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }; - - public static void start(Context context) { - Intent starter = new Intent(context, BrightnessActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_brightness; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - tvBrightness = findViewById(R.id.tv_brightness); - sbBrightness = findViewById(R.id.sb_brightness); - tvWindowBrightness = findViewById(R.id.tv_window_brightness); - sbWindowBrightness = findViewById(R.id.sb_window_brightness); - tbAutoBrightness = findViewById(R.id.tb_set_auto_brightness_enable); - - sbBrightness.setProgress(BrightnessUtils.getBrightness()); - sbBrightness.setOnSeekBarChangeListener(brightnessChangeListener); - updateBrightness(); - - sbWindowBrightness.setProgress(BrightnessUtils.getWindowBrightness(getWindow())); - sbWindowBrightness.setOnSeekBarChangeListener(windowBrightnessChangeListener); - updateWindowBrightness(); - - tbAutoBrightness.setChecked(BrightnessUtils.isAutoBrightnessEnabled()); - tbAutoBrightness.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - && !Settings.System.canWrite(Utils.getApp())) { - Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); - intent.setData(Uri.parse("package:" + Utils.getApp().getPackageName())); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - Utils.getApp().startActivity(intent); - } - } - }); - - tbAutoBrightness.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - boolean isSuccess = BrightnessUtils.setAutoBrightnessEnabled(isChecked); - if (!isSuccess) { - tbAutoBrightness.toggle(); - } - } - }); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } - - private void updateBrightness() { - tvBrightness.setText(new SpanUtils() - .append(String.valueOf(BrightnessUtils.getBrightness())) - .create() - ); - } - - private void updateWindowBrightness() { - tvWindowBrightness.setText(new SpanUtils() - .append(String.valueOf(BrightnessUtils.getWindowBrightness(getWindow()))) - .create() - ); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/sub/flashlight/FlashlightActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/sub/flashlight/FlashlightActivity.java deleted file mode 100644 index 0e30a98910..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/sub/flashlight/FlashlightActivity.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.blankj.androidutilcode.feature.sub.flashlight; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.androidutilcode.helper.PermissionHelper; -import com.blankj.subutil.util.FlashlightUtils; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/04/27 - * desc : demo about FlashlightUtils - *- */ -public class FlashlightActivity extends BaseBackActivity { - - TextView tvAboutFlashlight; - - public static void start(Context context) { - Intent starter = new Intent(context, FlashlightActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_flashlight; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - tvAboutFlashlight = findViewById(R.id.tv_about_flashlight); - findViewById(R.id.btn_set_flashlight_on).setOnClickListener(this); - findViewById(R.id.btn_set_flashlight_off).setOnClickListener(this); - } - - @Override - public void doBusiness() { - if (FlashlightUtils.isFlashlightEnable()) { - FlashlightUtils.getInstance().register(); - } - updateAboutFlashlight(); - } - - @Override - public void onWidgetClick(View view) { - if (!FlashlightUtils.isFlashlightEnable()) return; - switch (view.getId()) { - case R.id.btn_set_flashlight_on: - PermissionHelper.requestCamera(new PermissionHelper.OnPermissionGrantedListener() { - @Override - public void onPermissionGranted() { - FlashlightUtils.getInstance().setFlashlightOn(); - } - }); - break; - case R.id.btn_set_flashlight_off: - PermissionHelper.requestCamera(new PermissionHelper.OnPermissionGrantedListener() { - @Override - public void onPermissionGranted() { - FlashlightUtils.getInstance().setFlashlightOff(); - } - }); - break; - } - updateAboutFlashlight(); - } - - @Override - protected void onDestroy() { - FlashlightUtils.getInstance().unregister(); - super.onDestroy(); - } - - private void updateAboutFlashlight() { - PermissionHelper.requestCamera(new PermissionHelper.OnPermissionGrantedListener() { - @Override - public void onPermissionGranted() { - tvAboutFlashlight.setText(new SpanUtils() - .appendLine("isFlashlightEnable: " + FlashlightUtils.isFlashlightEnable()) - .appendLine("isFlashlightOn: " + FlashlightUtils.getInstance().isFlashlightOn()) - .create()); - } - }); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationActivity.java deleted file mode 100755 index 6d4636addb..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationActivity.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.blankj.androidutilcode.feature.sub.location; - -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.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : demo about LocationUtils - *- */ -public class LocationActivity extends BaseBackActivity { - - TextView tvAboutLocation; - LocationService mLocationService; - - public static void start(Context context) { - Intent starter = new Intent(context, LocationActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_location; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_location)); - - tvAboutLocation = findViewById(R.id.tv_about_location); - tvAboutLocation.setText(new SpanUtils() - .appendLine("lastLatitude: unknown") - .appendLine("lastLongitude: unknown") - .appendLine("latitude: unknown") - .appendLine("longitude: unknown") - .appendLine("getCountryName: unknown") - .appendLine("getLocality: unknown") - .appendLine("getStreet: unknown") - .create() - ); - } - - @Override - public void doBusiness() { - bindService(new Intent(this, LocationService.class), conn, Context.BIND_AUTO_CREATE); - } - - @Override - public void onWidgetClick(View view) { - - } - - @Override - protected void onDestroy() { - unbindService(conn); - super.onDestroy(); - } - - ServiceConnection conn = new ServiceConnection() { - @Override - public void onServiceDisconnected(ComponentName name) { - - } - - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - mLocationService = ((LocationService.LocationBinder) service).getService(); - mLocationService.setOnGetLocationListener(new LocationService.OnGetLocationListener() { - @Override - public void getLocation(final String lastLatitude, final String lastLongitude, final String latitude, final String longitude, final String country, final String locality, final String street) { - runOnUiThread(new Runnable() { - @Override - public void run() { - tvAboutLocation.setText(new SpanUtils() - .appendLine("lastLatitude: " + lastLatitude) - .appendLine("lastLongitude: " + lastLongitude) - .appendLine("latitude: " + latitude) - .appendLine("longitude: " + longitude) - .appendLine("getCountryName: " + country) - .appendLine("getLocality: " + locality) - .appendLine("getStreet: " + street) - .create() - ); - } - }); - } - }); - } - }; -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationService.java b/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationService.java deleted file mode 100755 index fd4549f72e..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationService.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.blankj.androidutilcode.feature.sub.location; - -import android.app.Service; -import android.content.Intent; -import android.location.Location; -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.Looper; -import android.support.annotation.Nullable; - -import com.blankj.androidutilcode.helper.PermissionHelper; -import com.blankj.subutil.util.LocationUtils; -import com.blankj.utilcode.util.ToastUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/11/21 - * desc : demo about LocationUtils - *- */ -public class LocationService extends Service { - - private boolean isSuccess; - private String lastLatitude = "loading..."; - private String lastLongitude = "loading..."; - private String latitude = "loading..."; - private String longitude = "loading..."; - private String country = "loading..."; - private String locality = "loading..."; - private String street = "loading..."; - private OnGetLocationListener mOnGetLocationListener; - - public void setOnGetLocationListener(OnGetLocationListener onGetLocationListener) { - mOnGetLocationListener = onGetLocationListener; - } - - private LocationUtils.OnLocationChangeListener mOnLocationChangeListener = new LocationUtils.OnLocationChangeListener() { - @Override - public void getLastKnownLocation(Location location) { - lastLatitude = String.valueOf(location.getLatitude()); - lastLongitude = String.valueOf(location.getLongitude()); - if (mOnGetLocationListener != null) { - mOnGetLocationListener.getLocation(lastLatitude, lastLongitude, latitude, longitude, country, locality, street); - } - } - - @Override - public void onLocationChanged(final Location location) { - latitude = String.valueOf(location.getLatitude()); - longitude = String.valueOf(location.getLongitude()); - if (mOnGetLocationListener != null) { - mOnGetLocationListener.getLocation(lastLatitude, lastLongitude, latitude, longitude, country, locality, street); - } - country = LocationUtils.getCountryName(Double.parseDouble(latitude), Double.parseDouble(longitude)); - locality = LocationUtils.getLocality(Double.parseDouble(latitude), Double.parseDouble(longitude)); - street = LocationUtils.getStreet(Double.parseDouble(latitude), Double.parseDouble(longitude)); - if (mOnGetLocationListener != null) { - mOnGetLocationListener.getLocation(lastLatitude, lastLongitude, latitude, longitude, country, locality, street); - } - } - - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { - - } - }; - - @Override - public void onCreate() { - super.onCreate(); - PermissionHelper.requestLocation(new PermissionHelper.OnPermissionGrantedListener() { - @Override - public void onPermissionGranted() { - new Thread(new Runnable() { - @Override - public void run() { - Looper.prepare(); - isSuccess = LocationUtils.register(0, 0, mOnLocationChangeListener); - if (isSuccess) ToastUtils.showShort("init success"); - Looper.loop(); - } - }).start(); - } - }); - } - - @Nullable - @Override - public IBinder onBind(Intent intent) { - return new LocationBinder(); - } - - public class LocationBinder extends Binder { - public LocationService getService() { - return LocationService.this; - } - } - - @Override - public void onDestroy() { - LocationUtils.unregister(); - // 一定要制空,否则内存泄漏 - mOnGetLocationListener = null; - super.onDestroy(); - } - - /** - * 获取位置监听器 - */ - public interface OnGetLocationListener { - void getLocation( - String lastLatitude, String lastLongitude, - String latitude, String longitude, - String country, String locality, String street - ); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/sub/pinyin/PinyinActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/sub/pinyin/PinyinActivity.java deleted file mode 100644 index d600d20a9c..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/sub/pinyin/PinyinActivity.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.blankj.androidutilcode.feature.sub.pinyin; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.subutil.util.PinyinUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 17/02/01 - * desc : demo about PinyinUtils - *- */ -public class PinyinActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, PinyinActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_pinyin; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_pinyin)); - - TextView tvAboutPinyin = findViewById(R.id.tv_about_pinyin); - - String surnames = "乐乘乜仇会便区单参句召员宓弗折曾朴查洗盖祭种秘繁缪能蕃覃解谌适都阿难黑"; - int size = surnames.length(); - StringBuilder sb = new StringBuilder("汉字转拼音: " + PinyinUtils.ccs2Pinyin("汉字转拼音", " ") - + "\n获取首字母: " + PinyinUtils.getPinyinFirstLetters("获取首字母", " ") - + "\n\n测试姓氏" - + "\n澹台: " + PinyinUtils.getSurnamePinyin("澹台") - + "\n尉迟: " + PinyinUtils.getSurnamePinyin("尉迟") - + "\n万俟: " + PinyinUtils.getSurnamePinyin("万俟") - + "\n单于: " + PinyinUtils.getSurnamePinyin("单于")); - for (int i = 0; i < size; ++i) { - String surname = String.valueOf(surnames.charAt(i)); - sb.append(String.format( - "\n%s 正确: %-6s 错误: %-6s", - surname, - PinyinUtils.getSurnamePinyin(surname), - PinyinUtils.ccs2Pinyin(surname) - )); - } - tvAboutPinyin.setText(sb.toString()); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/helper/DialogHelper.java b/app/src/main/java/com/blankj/androidutilcode/helper/DialogHelper.java deleted file mode 100644 index 1118ac8f99..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/helper/DialogHelper.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.blankj.androidutilcode.helper; - -import android.app.Activity; -import android.content.DialogInterface; -import android.support.v7.app.AlertDialog; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.EditText; - -import com.blankj.androidutilcode.R; -import com.blankj.utilcode.util.ActivityUtils; -import com.blankj.utilcode.util.KeyboardUtils; -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 - *- */ -public class DialogHelper { - - public static void showRationaleDialog(final ShouldRequest shouldRequest) { - Activity topActivity = ActivityUtils.getTopActivity(); - if (topActivity == null) return; - new AlertDialog.Builder(topActivity) - .setTitle(android.R.string.dialog_alert_title) - .setMessage(R.string.permission_rationale_message) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - shouldRequest.again(true); - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - shouldRequest.again(false); - } - }) - .setCancelable(false) - .create() - .show(); - - } - - public static void showOpenAppSettingDialog() { - Activity topActivity = ActivityUtils.getTopActivity(); - if (topActivity == null) return; - new AlertDialog.Builder(topActivity) - .setTitle(android.R.string.dialog_alert_title) - .setMessage(R.string.permission_denied_forever_message) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - PermissionUtils.launchAppDetailsSettings(); - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - } - }) - .setCancelable(false) - .create() - .show(); - } - - public static void showAdaptScreenDialog() { - Activity topActivity = ActivityUtils.getTopActivity(); - if (topActivity == null) return; - new AlertDialog.Builder(topActivity) - .setTitle(android.R.string.dialog_alert_title) - .setMessage("Message!") - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - } - }) - .setCancelable(false) - .create() - .show(); - } - - public static void showKeyboardDialog() { - Activity topActivity = ActivityUtils.getTopActivity(); - if (topActivity == null) return; - final View dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_keyboard, null); - final EditText etInput = dialogView.findViewById(R.id.et_input); - final AlertDialog dialog = new AlertDialog.Builder(topActivity).setView(dialogView).create(); - dialog.setCanceledOnTouchOutside(false); - View.OnClickListener listener = new View.OnClickListener() { - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.btn_hide_soft_input: - KeyboardUtils.hideSoftInput(etInput); - break; - case R.id.btn_show_soft_input: - KeyboardUtils.showSoftInput(etInput); - break; - case R.id.btn_toggle_soft_input: - KeyboardUtils.toggleSoftInput(); - break; - case R.id.btn_close_dialog: - KeyboardUtils.hideSoftInput(etInput); - dialog.dismiss(); - break; - } - } - }; - dialogView.findViewById(R.id.btn_hide_soft_input).setOnClickListener(listener); - dialogView.findViewById(R.id.btn_show_soft_input).setOnClickListener(listener); - dialogView.findViewById(R.id.btn_toggle_soft_input).setOnClickListener(listener); - dialogView.findViewById(R.id.btn_close_dialog).setOnClickListener(listener); - dialog.show(); - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/helper/PermissionHelper.java b/app/src/main/java/com/blankj/androidutilcode/helper/PermissionHelper.java deleted file mode 100644 index 1012a4392d..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/helper/PermissionHelper.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.blankj.androidutilcode.helper; - -import com.blankj.utilcode.constant.PermissionConstants; -import com.blankj.utilcode.util.LogUtils; -import com.blankj.utilcode.util.PermissionUtils; - -import java.util.List; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/01/06 - * desc : helper about permission - *- */ -public class PermissionHelper { - - public static void requestCamera(final OnPermissionGrantedListener listener) { - request(listener, PermissionConstants.CAMERA); - } - - public static void requestStorage(final OnPermissionGrantedListener listener) { - request(listener, PermissionConstants.STORAGE); - } - - public static void requestPhone(final OnPermissionGrantedListener listener) { - request(listener, PermissionConstants.PHONE); - } - - public static void requestPhone(final OnPermissionGrantedListener grantedListener, - final OnPermissionDeniedListener deniedListener) { - request(grantedListener, deniedListener, PermissionConstants.PHONE); - } - - public static void requestSms(final OnPermissionGrantedListener listener) { - request(listener, PermissionConstants.SMS); - } - - public static void requestLocation(final OnPermissionGrantedListener listener) { - request(listener, PermissionConstants.LOCATION); - } - - private static void request(final OnPermissionGrantedListener grantedListener, - final @PermissionConstants.Permission String... permissions) { - request(grantedListener, null, permissions); - } - - private static void request(final OnPermissionGrantedListener grantedListener, - final OnPermissionDeniedListener deniedListener, - final @PermissionConstants.Permission String... permissions) { - PermissionUtils.permission(permissions) - .rationale(new PermissionUtils.OnRationaleListener() { - @Override - public void rationale(ShouldRequest shouldRequest) { - DialogHelper.showRationaleDialog(shouldRequest); - } - }) - .callback(new PermissionUtils.FullCallback() { - @Override - public void onGranted(List
+ * author: blankj + * blog : http://blankj.com + * time : 2019/07/13 + * desc : + *+ */ +class ConfigUtils { + + static init(Gradle gradle) { + generateDep(gradle) + addCommonGradle(gradle) + TaskDurationUtils.init(gradle) + } + + /** + * 根据 depConfig 生成 dep + */ + private static void generateDep(Gradle gradle) { + def configs = [:] + for (Map.Entry
+ * author: blankj + * blog : http://blankj.com + * time : 2019/07/13 + * desc : + *+ */ +class GLog { + + def static debugSwitch = true + + static d(Object... contents) { + if (!debugSwitch) return contents + return l(contents) + } + + static l(Object... contents) { + StringBuilder sb = new StringBuilder() + sb.append(LogConst.BORDER_TOP) + sb.append(borderMsg(processContents(contents))) + sb.append(LogConst.BORDER_BTM) + print sb.toString() + return contents + } + + private static borderMsg(String msg) { + StringBuilder sb = new StringBuilder() + object2String(msg).split(LogConst.LINE_SEP).each { line -> + sb.append(LogConst.BORDER_LFT).append(line).append(LogConst.LINE_SEP) + } + return sb + } + + private static processContents(final Object... contents) { + String body = LogConst.NULL + if (contents != null) { + if (contents.length == 1) { + body = object2String(contents[0]) + } else { + StringBuilder sb = new StringBuilder() + int i = 0 + for (int len = contents.length; i < len; ++i) { + Object content = contents[i] + sb.append("args[$i] = ") + .append(object2String(content)) + .append(LogConst.LINE_SEP) + } + body = sb.toString() + } + } + return body.length() == 0 ? LogConst.NOTHING : body + } + + static String object2String(Object object) { + if (object == null) return "null"; + if (object.getClass().isArray()) return LogFormatter.array2String(object); + if (object instanceof List) return LogFormatter.list2String(object); + if (object instanceof Map) return LogFormatter.map2String(object); + if (object instanceof Throwable) return LogFormatter.throwable2String(object); + return object.toString(); + } + + static class LogFormatter { + + private static array2String(Object object) { + if (object instanceof Object[]) { + return Arrays.deepToString((Object[]) object); + } else if (object instanceof boolean[]) { + return Arrays.toString((boolean[]) object); + } else if (object instanceof byte[]) { + return Arrays.toString((byte[]) object); + } else if (object instanceof char[]) { + return Arrays.toString((char[]) object); + } else if (object instanceof double[]) { + return Arrays.toString((double[]) object); + } else if (object instanceof float[]) { + return Arrays.toString((float[]) object); + } else if (object instanceof int[]) { + return Arrays.toString((int[]) object); + } else if (object instanceof long[]) { + return Arrays.toString((long[]) object); + } else if (object instanceof short[]) { + return Arrays.toString((short[]) object); + } + throw new IllegalArgumentException("Array has incompatible type: " + object.getClass()); + } + + private static list2String(List list) { + StringBuilder sb = new StringBuilder() + sb.append("[") + list.each { v -> + if (v instanceof Map || v instanceof List) { + 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,", "")) + } + } + sb.deleteCharAt(sb.length() - 1) + if (deep - 1 == 0) { + sb.append("$LogConst.LINE_SEP]") + } else { + sb.append(String.format("$LogConst.LINE_SEP%${(deep - 1) * 8}s]", "")) + } + return sb.toString() + } + + private static deep = 1; + + private static map2String(Map map) { + StringBuilder sb = new StringBuilder() + sb.append("[") + map.each { k, v -> + if (v instanceof Map || v instanceof List) { + sb.append(String.format("$LogConst.LINE_SEP%${deep++ * 8}s%-26s: ${object2String(v)},", "", k)) + deep-- + } else { + sb.append(String.format("$LogConst.LINE_SEP%${deep * 8}s%-26s: $v,", "", k)) + } + } + sb.deleteCharAt(sb.length() - 1) + if (deep - 1 == 0) { + sb.append("$LogConst.LINE_SEP]") + } else { + sb.append(String.format("$LogConst.LINE_SEP%${(deep - 1) * 8}s]", "")) + } + return sb.toString() + } + + private static throwable2String(Throwable throwable) { + final List
+ * author: blankj + * blog : http://blankj.com + * time : 2019/11/22 + * desc : + *+ */ +class TaskDurationUtils { + + static List
- * author: Blankj - * blog : http://blankj.com - * time : 2018/10/08 - * desc : - *- */ -public class JsonUtils { - - public static String getFormatJson(Object object) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - return gson.toJson(object); - } -} diff --git a/bus-gradle-plugin/src/main/java/com/blankj/util/LogUtils.java b/bus-gradle-plugin/src/main/java/com/blankj/util/LogUtils.java deleted file mode 100755 index b52fc5aca9..0000000000 --- a/bus-gradle-plugin/src/main/java/com/blankj/util/LogUtils.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.blankj.util; - -import org.gradle.api.logging.Logger; - -public final class LogUtils { - - private static Logger mLogger = Utils.getProject().getLogger(); - private static String PREFIX = "PLUGIN-BUS >>> "; - - public static void l(Object content) { - mLogger.lifecycle(PREFIX + content); - } - - public static void d(Object content) { - mLogger.debug(PREFIX + content); - } - - public static void i(Object content) { - mLogger.info(PREFIX + content); - } - - public static void w(Object content) { - mLogger.warn(PREFIX + content); - } - - public static void e(Object content) { - mLogger.error(PREFIX + content); - } -} \ No newline at end of file diff --git a/bus-gradle-plugin/src/main/java/com/blankj/util/Utils.java b/bus-gradle-plugin/src/main/java/com/blankj/util/Utils.java deleted file mode 100755 index 6ff30e37e9..0000000000 --- a/bus-gradle-plugin/src/main/java/com/blankj/util/Utils.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.blankj.util; - -import org.gradle.api.Project; - -public final class Utils { - - private static Project mProject; - - public static void init(Project project) { - mProject = project; - } - - public static Project getProject() { - return mProject; - } -} \ No newline at end of file diff --git a/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java b/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java deleted file mode 100755 index d96eb864cb..0000000000 --- a/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java +++ /dev/null @@ -1,436 +0,0 @@ -package com.blankj.util; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import java.util.zip.ZipOutputStream; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/08/27 - * desc : utils about zip or jar - *- */ -public final class ZipUtils { - - private static final int BUFFER_LEN = 8192; - - private ZipUtils() { - throw new UnsupportedOperationException("u can't instantiate me..."); - } - - /** - * Zip the files. - * - * @param srcFiles The source of files. - * @param zipFilePath The path of ZIP file. - * @return {@code true}: success
- * author: Blankj - * blog : http://blankj.com - * time : 2018/09/21 - * desc : - *- */ -public class BusTest { - - @Test - public void test() throws Exception { - String methodName = "()"; - int st = methodName.indexOf('('); - int end = methodName.length(); - System.out.println((st + 1) + "" + (end - 1)); - String substring = methodName.substring(st + 1, end - 1); - - System.out.println(substring.equals("")); - } -} diff --git a/config.gradle b/config.gradle deleted file mode 100644 index 09b61c795f..0000000000 --- a/config.gradle +++ /dev/null @@ -1,170 +0,0 @@ -ext { - applicationId = 'com.blankj.androidutilcode' - appName = 'Util' - - compileSdkVersion = 27 - minSdkVersion = 14 - targetSdkVersion = 27 - versionCode = 1_021_003 - versionName = '1.21.3'// E.g. 1.9.72 => 1,009,072 - - localDebugPlugin = false - - // lib version - kotlin_version = '1.3.0' - support_version = '27.1.1' - leakcanary_version = '1.5.4' - - dep = [ - // plugin - gradle : "com.android.tools.build:gradle:3.2.1", - kotlin_gradle_plugin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version", - android_maven_gradle_plugin: "com.github.dcendents:android-maven-gradle-plugin:2.1", - gradle_bintray_plugin : "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4", - bus_gradle_plugin : "com.blankj:bus-gradle-plugin:1.3", - - // lib - support : [ - appcompat_v7: "com.android.support:appcompat-v7:$support_version", - design : "com.android.support:design:$support_version", - multidex : "com.android.support:multidex:1.0.2", - ], - constraint : "com.android.support.constraint:constraint-layout:1.1.3", - kotlin : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", - leakcanary : [ - android : "com.squareup.leakcanary:leakcanary-android:$leakcanary_version", - android_no_op: "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version", - ], - free_proguard : "com.blankj:free-proguard:0.0.7", - bus : "com.blankj:bus:1.0", - adapt_screen : "com.blankj:adapt-screen:0.0.3", - - gson : "com.google.code.gson:gson:2.8.2", - glide : "com.github.bumptech.glide:glide:4.7.1", - retrofit : "com.squareup.retrofit2:retrofit:2.4.0", - javassist : "org.javassist:javassist:3.23.1-GA", - commons_io : "commons-io:commons-io:2.5", - - junit : "junit:junit:4.12", - robolectric : "org.robolectric:robolectric:3.1.2", - ] - - configAndroidDomain = this.&configAndroidDomain - configAppDependencies = this.&configAppDependencies -} - -def configAndroidDomain(Project pro, String applicationIdSuffix = "") { - configCommon(pro) - if (pro.plugins.hasPlugin("com.android.application")) { - configAppAndroidDomain(pro, applicationIdSuffix) - } else { - configLibAndroidDomain(pro) - } -} - -def configCommon(Project pro) { - pro.android { - compileSdkVersion rootProject.compileSdkVersion - defaultConfig { - minSdkVersion rootProject.minSdkVersion - versionCode rootProject.versionCode - versionName rootProject.versionName - } - - lintOptions { - abortOnError false - } - - testOptions.unitTests.all { - testLogging { - events 'passed', 'skipped', 'failed', 'standardOut', 'standardError' - } - } - } -} - - -def configAppAndroidDomain(Project pro, String applicationIdSuffix = "") { - configField(pro) - configSigning(pro) - configApkName(pro) - pro.android { - defaultConfig { - applicationId rootProject.applicationId + applicationIdSuffix - targetSdkVersion rootProject.targetSdkVersion - multiDexEnabled true - } - - buildTypes { - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - - sourceSets { - main.res.srcDirs += 'src/main/res-core' - main.res.srcDirs += 'src/main/res-sub' - } - } - - pro.dependencies { - // LeakCanary - debugImplementation dep.leakcanary.android - releaseImplementation dep.leakcanary.android_no_op - } -} - -def configField(Project pro) { - pro.android.defaultConfig { - resValue "string", "app_name", rootProject.appName - } -} - -def configSigning(Project pro) { - File signPropertiesFile = file('sign/keystore.properties') - if (!signPropertiesFile.exists()) return - pro.android { - Properties properties = new Properties() - properties.load(new FileInputStream(signPropertiesFile)) - signingConfigs { - release { - storeFile file(properties['keystore']) - storePassword properties['storePassword'] - keyAlias properties['keyAlias'] - keyPassword properties['keyPassword'] - } - } - buildTypes.release.signingConfig signingConfigs.release - } -} - -def configApkName(Project pro) { - pro.android.applicationVariants.all { variant -> - if (variant.buildType.name != "debug") { - variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk") - variant.getPackageApplication().outputScope.apkDatas.forEach { apkData -> - apkData.outputFileName = "util_" + variant.versionName.replace(".", "_") + ".apk" - } - } - } -} - -def configLibAndroidDomain(Project pro) { - pro.android { - buildTypes { - release { - minifyEnabled false - consumerProguardFiles 'proguard-rules.pro' - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - } - - afterEvaluate { - generateReleaseBuildConfig.enabled = false - generateDebugBuildConfig.enabled = false - } -} - -//./gradlew utilcode:bintrayUpload \ No newline at end of file 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/app/.gitignore b/feature/launcher/app/.gitignore similarity index 100% rename from app/.gitignore rename to feature/launcher/app/.gitignore diff --git a/feature/launcher/app/build.gradle b/feature/launcher/app/build.gradle new file mode 100644 index 0000000000..8f2b6d205d --- /dev/null +++ b/feature/launcher/app/build.gradle @@ -0,0 +1,5 @@ +apply plugin: 'kotlin-kapt' + +dependencies { + kapt Config.libs.eventbus_processor.path +} \ No newline at end of file diff --git a/launcher/app/proguard-rules.pro b/feature/launcher/app/proguard-rules.pro similarity index 100% rename from launcher/app/proguard-rules.pro rename to feature/launcher/app/proguard-rules.pro diff --git a/feature/launcher/app/src/main/AndroidManifest.xml b/feature/launcher/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..4f033c06a6 --- /dev/null +++ b/feature/launcher/app/src/main/AndroidManifest.xml @@ -0,0 +1,29 @@ + +
+ * author: Blankj + * blog : http://blankj.com + * time : 2016/10/12 + * desc : + *+ */ +public class LauncherApp extends CommonApplication { + + private static LauncherApp sInstance; + + public static LauncherApp getInstance() { + return sInstance; + } + + @Override + public void onCreate() { + super.onCreate(); + sInstance = this; + } +} + + diff --git a/launcher/app/.gitignore b/feature/main/app/.gitignore similarity index 100% rename from launcher/app/.gitignore rename to feature/main/app/.gitignore diff --git a/feature/main/app/build.gradle b/feature/main/app/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/launcher/pkg/proguard-rules.pro b/feature/main/app/proguard-rules.pro similarity index 100% rename from launcher/pkg/proguard-rules.pro rename to feature/main/app/proguard-rules.pro diff --git a/feature/main/app/src/main/AndroidManifest.xml b/feature/main/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..bb8c3398d4 --- /dev/null +++ b/feature/main/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + +
+ * author: Blankj + * blog : http://blankj.com + * time : 2016/10/12 + * desc : + *+ */ +public class MainApp extends CommonApplication { + + private static MainApp sInstance; + + public static MainApp getInstance() { + return sInstance; + } + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + } + + @Override + public void onCreate() { + super.onCreate(); + sInstance = this; + } +} + + diff --git a/launcher/pkg/.gitignore b/feature/main/pkg/.gitignore similarity index 100% rename from launcher/pkg/.gitignore rename to feature/main/pkg/.gitignore diff --git a/feature/main/pkg/build.gradle b/feature/main/pkg/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/resource/proguard-rules.pro b/feature/main/pkg/proguard-rules.pro similarity index 100% rename from lib/resource/proguard-rules.pro rename to feature/main/pkg/proguard-rules.pro diff --git a/feature/main/pkg/src/main/AndroidManifest.xml b/feature/main/pkg/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..1cfdba8f69 --- /dev/null +++ b/feature/main/pkg/src/main/AndroidManifest.xml @@ -0,0 +1,13 @@ +
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/07/10 + * desc : + *+ */ +@ApiUtils.Api(isMock = true) +public class SubUtilApiMock extends SubUtilApi { + + @Override + public void startSubUtilActivity(Context context) { + ToastUtils.showShort("startSubUtilActivity"); + } + +} diff --git a/feature/mock/src/main/java/com/blankj/mock/utilcode/UtilCodeApiMock.java b/feature/mock/src/main/java/com/blankj/mock/utilcode/UtilCodeApiMock.java new file mode 100644 index 0000000000..df22cbf92a --- /dev/null +++ b/feature/mock/src/main/java/com/blankj/mock/utilcode/UtilCodeApiMock.java @@ -0,0 +1,32 @@ +package com.blankj.mock.utilcode; + +import android.content.Context; + +import com.blankj.utilcode.export.api.UtilCodeApi; +import com.blankj.utilcode.util.ApiUtils; +import com.blankj.utilcode.util.ToastUtils; + +/** + *
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/07/10 + * desc : + *+ */ +@ApiUtils.Api(isMock = true) +public class UtilCodeApiMock extends UtilCodeApi { + + @Override + public void startUtilCodeActivity(Context context) { + ToastUtils.showShort("startUtilCodeActivity"); + } + + @Override + public void testCallback(Callback callback) { + if (callback != null) { + callback.call(); + } + } + +} diff --git a/subutil/lib/.gitignore b/feature/subutil/app/.gitignore similarity index 100% rename from subutil/lib/.gitignore rename to feature/subutil/app/.gitignore diff --git a/feature/subutil/app/build.gradle b/feature/subutil/app/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/utilcode/pkg/proguard-rules.pro b/feature/subutil/app/proguard-rules.pro similarity index 100% rename from utilcode/pkg/proguard-rules.pro rename to feature/subutil/app/proguard-rules.pro diff --git a/feature/subutil/app/src/main/AndroidManifest.xml b/feature/subutil/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..2989dbfebf --- /dev/null +++ b/feature/subutil/app/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + +
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/06/09 + * desc : + *+ */ +public abstract class SubUtilApi extends ApiUtils.BaseApi { + + public abstract void startSubUtilActivity(Context context); + +} diff --git a/utilcode/pkg/.gitignore b/feature/subutil/pkg/.gitignore similarity index 100% rename from utilcode/pkg/.gitignore rename to feature/subutil/pkg/.gitignore diff --git a/feature/subutil/pkg/build.gradle b/feature/subutil/pkg/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/feature/subutil/pkg/proguard-rules.pro b/feature/subutil/pkg/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/feature/subutil/pkg/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/feature/subutil/pkg/src/main/AndroidManifest.xml b/feature/subutil/pkg/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..198eb5c31b --- /dev/null +++ b/feature/subutil/pkg/src/main/AndroidManifest.xml @@ -0,0 +1,55 @@ +
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/07/02 + * desc : + *+ */ +@ApiUtils.Api +public class SubUtilApiImpl extends SubUtilApi { + + @Override + public void startSubUtilActivity(Context context) { + SubUtilActivity.Companion.start(context); + } + +} diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt new file mode 100644 index 0000000000..2c6af650ef --- /dev/null +++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt @@ -0,0 +1,61 @@ +package com.blankj.subutil.pkg.feature + +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.subutil.pkg.R +import com.blankj.subutil.pkg.feature.appStore.AppStoreActivity +import com.blankj.subutil.pkg.feature.battery.BatteryActivity +import com.blankj.subutil.pkg.feature.country.CountryActivity +import com.blankj.subutil.pkg.feature.dangerous.DangerousActivity +import com.blankj.subutil.pkg.feature.location.LocationActivity +import com.blankj.subutil.pkg.feature.pinyin.PinyinActivity +import com.blankj.utilcode.util.CollectionUtils + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2016/09/29 + * desc : MainActivity + * ``` + */ +class SubUtilActivity : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, SubUtilActivity::class.java) + context.startActivity(starter) + } + } + + + override fun bindTitleRes(): Int { + return R.string.sub_util + } + + override fun bindItems(): List
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/07/01 + * desc : + *+ */ +public abstract class UtilCodeApi extends ApiUtils.BaseApi { + + public abstract void startUtilCodeActivity(Context context); + + public abstract void testCallback(Callback callback); + + public interface Callback { + void call(); + } + +} \ No newline at end of file diff --git a/feature/utilcode/pkg/.gitignore b/feature/utilcode/pkg/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/feature/utilcode/pkg/.gitignore @@ -0,0 +1 @@ +/build diff --git a/feature/utilcode/pkg/build.gradle b/feature/utilcode/pkg/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/feature/utilcode/pkg/proguard-rules.pro b/feature/utilcode/pkg/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/feature/utilcode/pkg/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/feature/utilcode/pkg/src/main/AndroidManifest.xml b/feature/utilcode/pkg/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..8da0667a23 --- /dev/null +++ b/feature/utilcode/pkg/src/main/AndroidManifest.xml @@ -0,0 +1,284 @@ +
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/07/01 + * desc : + *+ */ +@ApiUtils.Api +public class UtilCodeApiImpl extends UtilCodeApi { + + @Override + public void startUtilCodeActivity(Context context) { + CoreUtilActivity.Companion.start(context); + } + + @Override + public void testCallback(Callback callback) { + if (callback != null) { + 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 new file mode 100644 index 0000000000..2640191959 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt @@ -0,0 +1,226 @@ +package com.blankj.utilcode.pkg.feature + +import android.content.Context +import android.content.Intent +import android.os.Bundle +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 +import com.blankj.utilcode.pkg.feature.api.ApiActivity +import com.blankj.utilcode.pkg.feature.app.AppActivity +import com.blankj.utilcode.pkg.feature.bar.BarActivity +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 +import com.blankj.utilcode.pkg.feature.process.ProcessActivity +import com.blankj.utilcode.pkg.feature.reflect.ReflectActivity +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 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 + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2016/09/29 + * desc : + * ``` + */ +class CoreUtilActivity : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, CoreUtilActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitleRes(): Int { + return R.string.core_util + } + + override fun bindItems(): MutableList
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/07/10 + * desc : demo about ApiUtils + *+ */ +public abstract class OtherModuleApi extends ApiUtils.BaseApi { + + public abstract void invokeWithParams(ApiBean bean); + + public abstract ApiBean invokeWithReturnValue(); + + public static class ApiBean { + + public String name; + + public ApiBean(String name) { + this.name = name; + } + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java new file mode 100644 index 0000000000..b3efb7af7a --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java @@ -0,0 +1,28 @@ +package com.blankj.utilcode.pkg.feature.api.other.pkg; + +import com.blankj.utilcode.pkg.feature.api.other.export.OtherModuleApi; +import com.blankj.utilcode.util.ApiUtils; +import com.blankj.utilcode.util.ToastUtils; + +/** + *
+ * author: Blankj + * blog : http://blankj.com + * time : 2019/07/10 + * desc : demo about ApiUtils + *+ */ +@ApiUtils.Api +public class OtherPkgApiImpl extends OtherModuleApi { + + @Override + public void invokeWithParams(ApiBean bean) { + ToastUtils.showShort(bean.name); + } + + @Override + public ApiBean invokeWithReturnValue() { + String value = "value"; + return new ApiBean(value); + } +} 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 new file mode 100644 index 0000000000..21eb351146 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt @@ -0,0 +1,162 @@ +package com.blankj.utilcode.pkg.feature.app + +import android.app.Activity +import android.content.Context +import android.content.Intent +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.util.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2016/10/13 + * desc : demo about AppUtils + * ``` + */ +class AppActivity : CommonActivity(), Utils.OnAppStatusChangedListener { + + var isRegisterAppStatusChangedListener: Boolean = false + + companion object { + fun start(context: Context) { + PermissionHelper.request(context, object : PermissionUtils.SimpleCallback { + override fun onGranted() { + val starter = Intent(context, AppActivity::class.java) + context.startActivity(starter) + } + + override fun onDenied() { + } + }, PermissionConstants.STORAGE) + } + } + + private val listener = object : OnReleasedListener { + override fun onReleased() { + return AppUtils.installApp(Config.TEST_APK_PATH) + } + } + + override fun bindTitleRes(): Int { + return R.string.demo_app + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + LogUtils.e(requestCode, resultCode) + } + + override fun bindItems(): MutableList
+ * 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.Consumer
+ * 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.Consumer
+ * author: blankj + * blog : http://blankj.com + * time : 2019/11/26 + * desc : + *+ */ +public class MvpPresenter extends BasePresenter
+ * author: blankj + * blog : http://blankj.com + * time : 2019/11/26 + * desc : + *+ */ +public class MvpView extends BaseView
+ * 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 new file mode 100644 index 0000000000..cf56301068 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt @@ -0,0 +1,49 @@ +package com.blankj.utilcode.pkg.feature.resource + +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.Config +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.ResourceUtils + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2018/05/07 + * desc : demo about ResourceUtils + * ``` + */ +class ResourceActivity : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, ResourceActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitleRes(): Int { + return R.string.demo_resource + } + + override fun bindItems(): MutableList