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/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 ff9841fba7..9d11f56a24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,15 @@
*.iml
+__api__.json
+__bus__.json
.gradle
-/local.properties
+local.properties
.idea
.DS_Store
/build
/captures
-.externalNativeBuild
\ No newline at end of file
+.externalNativeBuild
+/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
new file mode 100644
index 0000000000..73e8145bf1
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,522 @@
+* `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.
+* `18/11/12` [fix] SPUtils bug when use in multi threads.
+* `18/10/25` [fix] SpanUtils#setLineHeight bug of multi lines. Publish v1.21.2.
+* `18/10/24` [fix] SpanUtils#appendImage on VIVO. Publish v1.21.1.
+* `18/10/16` [add] BusUtils, DeviceUtils#isAdbEnabled. Publish v1.21.0.
+* `18/09/29` [fix] ToastUtils which causes crash in the some devices of Xiaomi. Publish v1.20.4.
+* `18/09/13` 修复 ToastUtils 在小米手机显示 Toast 带有 App 名,发布 1.20.3
+* `18/09/12` 修复 KeyBoardUtils#fixAndroidBug5497,完善 ToastUtils,发布 1.20.2
+* `18/09/11` 新增 BarUtils#isSupportNavBar,删除 BarUtils#setNavBarImmersive
+* `18/09/10` 修复 KeyboardUtils 中 getWindowVisibleDisplayFrame 空指针异常,更新 BarUtils#isNavBarVisible
+* `18/09/06` 新增 PathUtils,发布 1.20.1
+* `18/09/05` 新增 KeyboardUtils#showSoftInputUsingToggle 和 KeyboardUtils#hideSoftInputUsingToggle
+* `18/09/04` 修复 SHA 算法名
+* `18/09/03` 新增 MetaDataUtils,发布 1.20.0
+* `18/08/30` 修复 PermissionUtils$PermissionActivity 的 window 背景为黑色的问题,发布 1.19.4
+* `18/08/28` 新增 RegexUtils#isIDCard18Exact
+* `18/08/26` 新增 AppUtils#getAppSignatureSHA256 和 AppUtils#getAppSignatureMD5,发布 1.19.3
+* `18/08/24` 新增 ScreenUtils#restoreAdaptScreen,利用 FileProvider4UtilCode 不再需要初始化,发布 1.19.2
+* `18/08/23` 修复 适配后 ToastUtils 原生 Toast 尺寸发生改变的问题,修复 KeyboardUtils#fixSoftInputLeaks,发布 1.19.1
+* `18/08/10` 修复 ScreenUtils#adaptxx 导致获取状态栏和导航栏尺寸不对问题,发布 1.19.0
+* `18/08/09` 新增 IntentUtils#isIntentAvailable,ToastUtils 传入空显示 null,发布 1.18.6
+* `18/08/08` 修复 ScreenUtils#adaptxx 在第三方 SDK 会出现的问题,发布 1.18.5
+* `18/08/07` 修复 ScreenUtils#adaptxx 在 API 26 以下无效的 bug,发布 1.18.4
+* `18/08/06` 修复 ScreenUtils#screenShot 中 decorView.getDrawingCache() 为空的问题,发布 1.18.3
+* `18/08/05` 修复 1.18.0 版本删去 `if (activity.getClass() == PermissionUtils.PermissionActivity.class) return;` 造成 PermissionUtils 获取栈顶 Activity 问题,发布 1.18.2
+* `18/08/04` 新增 LogUtils#Config#setSaveDays,发布 1.18.1
+* `18/08/03` 新增 LogUtils#Config#addFormatter,并新增 Array, Throwable, Bundle, Intent 的格式化输出
+* `18/08/02` 修复 TimeUtils 中的 SimpleDateFormat 为 ThreadLocal 实现
+* `18/08/01` 删除 标记废弃的 CacheUtils, AppUtils#installApp, TimeUtils#getWeekIndex,发布 1.18.0
+* `18/07/30` 替换 ScreenUtils#adaptPortraitScreen 和 ScreenUtils#adaptLandscapeScreen,为 ScreenUtils#adaptScreen4VerticalSlide 和 ScreenUtils#adaptScreen4HorizontalSlide
+* `18/07/28` 修复 NetworkUtils#getIPAddress
+* `18/07/16` 新增 ScreenUtils#adaptPortraitScreen 和 ScreenUtils#adaptLandscapeScreen,发布 1.17.3
+* `18/07/13` 修复 IntentUtils 分享图片判断逻辑,CacheDiskUtils 可放入 byte[0]
+* `18/06/29` 修复 FragmentUtils 中 getFragmentManager 空指针错误,发布 1.17.2
+* `18/06/27` 新增 UriUtils#uri2File
+* `18/06/25` 新增 KeyboardUtils#fixAndroidBug5497,发布 1.17.1 版本
+* `18/06/21` 修复 FragmentUtils#add 死循环的 BUG
+* `18/06/14` 替换 CacheUtils 为 CacheDiskUtils,CacheUtils 标记 deprecated,发布 1.17.0 版本
+* `18/06/13` 新增 CacheMemoryUtils 和 CacheDoubleUtils
+* `18/06/12` 完善 FragmentUtils#add 和 replace 新增 tag
+* `18/05/30` 完善 DeviceUtils#getMacAddress,发布 1.16.4 版本
+* `18/05/30` 修复 ToastUtils 在 targetSdkVersion 为 27 在 api 25 机器快速 show 两次崩溃的异常,发布 1.16.3 版本
+* `18/05/29` 完善 TimeUtils 的 timeSpan 带符号位,ToastUtils 去除弱引用,发布 1.16.2 版本
+* `18/05/25` 新增 AppUtils#registerAppStatusChangedListener 和 AppUtils#unregisterAppStatusChangedListener,发布 1.16.1 版本
+* `18/05/22` 新增 ThreadUtils,发布 1.16.0 版本
+* `18/05/15` 新增 MetaDataUtils 和 ActivityUtils#startActivityForResult,发布 1.15.1 版本
+* `18/05/08` 新增 ResourceUtils,发布 1.15.0 版本
+* `18/05/07` 修复 ZipUtils 漏洞,发布 1.14.4 版本
+* `18/05/03` 修复 ToastUtils 默认字体大小问题,发布 1.14.3 版本
+* `18/05/02` 修复 PermissionUtils 空异常,发布 1.14.2 版本
+* `18/04/28` 新增 FlashlightUtils,发布 1.14.1 版本
+* `18/04/26` 修复 KeyboardUtils 全屏 NO_LIMIT 的 bug
+* `18/04/25` 修复 多个空异常
+* `18/04/24` 修复 多 FileProvider 带来的问题,发布 1.14.0 版本
+* `18/04/23` 新增 RSA 加解密,发布 1.13.16 版本
+* `18/04/22` 新增 LogUtils 设置栈偏移
+* `18/04/21` 新增 AppUtils#relaunchApp、DeviceUtils#getABIs,发布 1.13.15 版本
+* `18/04/20` 新增 BarUtils#setNavBarColor、BarUtils#getNavBarColor
+* `18/04/19` 新增 Process#isMainProcess、Process#getCurrentProcessName,发布 1.13.14 版本
+* `18/04/18` 修复 LogUtils 头部空指针异常,SPUtils、CacheUtils 存储空值异常,发布 1.13.13 版本
+* `18/04/17` 修复 ToastUtils 内存泄漏问题,感谢 [LambertCoding](https://github.com/LambertCoding),发布 1.13.12 版本
+* `18/04/16` 完善 AppUtils#installAppSilent 路径包含空格问题,发布 1.13.11 版本
+* `18/04/10` 完善 OnCrashListener 回调崩溃信息,发布 1.13.10 版本
+* `18/04/09` 修复 静默安装重载错误,发布 1.13.9 版本
+* `18/04/08` 修复 获取栈顶 Activity 链表为空的异常,获取栈顶 Activity 放到 Utils 中,发布 1.13.8 版本
+* `18/04/06` 新增 GsonUtils 及单元测试
+* `18/04/05` 完善 README 文档
+* `18/04/03` 修复 LogUtils 在 Android Studio 3.1 版本日志丑陋的问题,发布 1.13.7 版本
+* `18/03/29` 兼容 Utils 的初始化传入 application,发布 1.13.6 版本
+* `18/03/20` 修复 PermissionUtils 子进程的问题,发布 1.13.5 版本
+* `18/03/16` 新增 gradle 插件来格式化 README
+* `18/03/14` 修复 KeyboardUtils#getContentViewInvisibleHeight,发布 1.13.4 版本
+* `18/03/10` 完善 AppUtils#installAppSilent 和 DeviceUtils#getMacAddress,发布 1.13.3 版本
+* `18/03/09` 完善 ActivityUtils#getTopActivity
+* `18/03/08` 新增 反射获取栈顶 Activity 的方法,发布 1.13.2 版本
+* `18/03/07` 修复 PermissionUtils 请求权限为 0 的 崩溃
+* `18/03/05` 修复 Library Source does not match the bytecode for class LogUtils 问题,发布 1.13.1 版本
+* `18/03/04` 完善 Javadoc 中文版为英文版,发布 1.13.0 版本
+* `18/03/04` 完善 Javadoc 中文版为英文版
+* `18/03/03` 完善 Javadoc 中文版为英文版
+* `18/03/02` 完善 Javadoc 中文版为英文版
+* `18/03/01` 完善 Javadoc 中文版为英文版
+* `18/02/28` 完善 Javadoc 中文版为英文版
+* `18/02/27` 完善 Javadoc 中文版为英文版
+* `18/02/26` 完善 Javadoc 中文版为英文版
+* `18/02/25` 完善 Javadoc 中文版为英文版
+* `18/02/24` 完善 Javadoc 中文版为英文版
+* `18/02/23` 完善 Javadoc 中文版为英文版
+* `18/02/22` 完善 Javadoc 中文版为英文版
+* `18/02/21` 完善 Javadoc 中文版为英文版
+* `18/02/10` 完善 Javadoc 中文版为英文版
+* `18/02/09` 完善 非空转换插件 traute 的使用方式
+* `18/02/08` 修复 ActivityUtils option 低版本为空的异常
+* `18/01/31` 修复 default 相关的逻辑错误,发布 1.12.4,修复 ToastUtils 在 kotlin 中转义失败,发布 1.12.5
+* `18/01/28` 修复 ToastUtils 默认样式问题,发布 1.12.2,新增 DeviceUtils#getSDKVersionName,发布 1.12.3
+* `18/01/27` 修复 PermissionUtils 某些机型闪烁问题,发布 1.12.1
+* `18/01/17` 完善 ReflectUtils 及单元测试,发布 1.12.0 版本
+* `18/01/16` 完善 ReflectUtils 及单元测试
+* `18/01/15` 完善 ReflectUtils 及单元测试
+* `18/01/14` 完善 ReflectUtils 及单元测试
+* `18/01/13` 完善 ReflectUtils 及单元测试
+* `18/01/12` 完善 ReflectUtils 及单元测试
+* `18/01/11` 修复 ImageUtils 的 fastBlur radius 为 1 recycle 的 bug,新增 CrashUtils 初始化崩溃监听事件,发布 1.11.1 版本
+* `18/01/10` 完善 PermissionUtils 及 readme,发布 1.11.0 版本
+* `18/01/09` 完善 demo 动态权限适配
+* `18/01/08` 新增 SPActivity,删除 SPUtils 的单元测试
+* `18/01/08` 修复 ToastUtils 在 SDK 为 18 的自定义 toast 崩溃问题
+* `18/01/07` 新增 PermissionUtils 的 Demo
+* `18/01/06` 修复 权限相关工具类内存泄漏问题
+* `18/01/05` 新增 获取 Activity icon 和 logo
+* `18/01/04` 完善 6.0 动态权限相关工具类
+* `18/01/03` 完善 6.0 动态权限相关工具类
+* `18/01/02` 完善 6.0 动态权限相关工具类
+* `18/01/01` 新增 6.0 动态权限相关工具类
+* `17/12/30` 删除 SpanUtils 中设置图标
+* `17/12/29` 完善 SpanUtils 的 appendImage 对齐方式
+* `17/12/28` 完善 ScreenUtils 设置全屏的方式,发布 1.10.0
+* `17/12/26` 新增 状态栏、导航栏设置是否可见和判断是否可见
+* `17/12/22` 新增 注册软键盘改变监听器、注册导航栏改变监听器方法
+* `17/12/21` 完善 获取屏幕宽高,修复行宽度大于 100 字符
+* `17/12/20` 修复 SpanUtils 图标的 bug,不高于 6.0 的版本不支持居中和底部对齐
+* `17/12/19` 修复 SpanUtils 多图的 bug
+* `17/12/15` 新增 ReflectUtils
+* `17/12/14` 完善 手机号(精确)正则,发布 1.9.12
+* `17/12/12` 完善 LogUtils,当最终日志长度为 0 时,输出 log nothing
+* `17/12/11` 完善 ActivityUtils 的 finish 系列,发布 1.9.11
+* `17/12/04` 完善 LogUtils 边框改为单线清爽型
+* `17/11/30` 修复 ToastUtils 背景问题,发布 1.9.10
+* `17/11/30` 修复 ToastUtils 获取背景为空,发布 1.9.9
+* `17/11/28` 修复 EmptyUtils 对 CharSequence 的判断,感谢 jiezigg
+* `17/11/24` 新增 readme 格式化的 gradle 脚本
+* `17/11/15` 完善 资源分包位置,使其更合理
+* `17/11/10` 完善 LogUtils 新增日志头部,感谢 Kanade
+* `17/11/07` 完善 LogUtils 无 tag 的多参数
+* `17/11/06` 修复 LogUtils 多参数打印失败的问题
+* `17/11/01` 完善 ShellUtil 的 Msg 换行,感谢香脆的大鸡排
+* `17/10/30` 完善 README
+* `17/10/29` 修复 6.0 内部存储安装失败问题
+* `17/10/28` 完善 compile 为 implementation, provided 为 compileOnly
+* `17/10/27` 修复 兼容 AS3.0
+* `17/10/27` 修复 LogUtils 在 kotlin 中使用的问题
+* `17/10/25` 修复 LogUtils 边框,修复 getBitmap 从流获取
+* `17/09/30` 完善 FragmentUtils,发布 1.9.2
+* `17/09/29` 完善 FragmentUtils 和 isInstallApp
+* `17/09/28` 完善 FragmentUtils
+* `17/09/27` 完善 FragmentUtils
+* `17/09/26` 完善 ActivityUtils 及 Demo,发布 1.9.1
+* `17/09/25` 完善 ActivityUtils 及 Demo
+* `17/09/24` 完善 ActivityUtils 及 Demo
+* `17/09/23` 完善 FragmentUtils
+* `17/09/19` 修复 CrashUtils 自定义路径错误
+* `17/09/18` 完善 ImageUtils 的 Demo
+* `17/09/17` 完善 ImageUtils 的 compress
+* `17/09/13` 完善 ImageUtils 的 addBorder
+* `17/09/13` 完善 ImageUtils 的 toRound
+* `17/09/13` 完善 ImageUtils 和 LogUtils
+* `17/09/12` 完善 ImageUtils
+* `17/09/10` 完善 单元测试
+* `17/09/08` 完善 单元测试
+* `17/09/06` 完善 SDCardUtils 获取 SD 卡路径,完善 SPUtils 新增 commit
+* `17/09/05` 完善 LogUtils,发布版本 1.9.0
+* `17/09/04` 完善 ToastUtils,去除相关 safe 函数,都改为 safe 实现,新增 CustomToast 的 Demo
+* `17/09/02` 完善 ToastUtils,去除引入 view 带来的问题,发布版本 1.8.6
+* `17/08/30` 修复 ToastUtils 弱引用带来的问题,修复 CacheUtils 异步问题,发布版本 1.8.5
+* `17/08/28` 修复 ToastUtils 内存泄露,新增 toast 可根据系统字体显示不同字体,发布版本 1.8.4
+* `17/08/20` 新增 监听 Activity 生命周期,退出 App,发布版本 1.8.3
+* `17/08/11` 完善 LogUtils 的 Builder 改为 Config,发布版本 1.8.2
+* `17/08/10` 完善 FileUtils 的 deleteFilesInDir 和 listFilesInDir
+* `17/08/08` 新增 反射工具类 ReflectUtils
+* `17/08/06` 完善 为按功能分包,增加 subutil 的 Demo
+* `17/07/31` 修复 NetworkUtils 的 isAvailableByPing 循环递归,发布 1.8.1
+* `17/07/31` 完善 BarUtils,发布 1.8.0
+* `17/07/31` 完善 BarUtils
+* `17/07/30` 完善 BarUtils
+* `17/07/29` 完善 BarUtils
+* `17/07/28` 完善 BarUtils
+* `17/07/27` 完善 BarUtils
+* `17/07/26` 完善 ActivityUtils
+* `17/07/25` 完善 BarUtils,更新布局文件
+* `17/07/24` 完善 BarUtils
+* `17/07/23` 完善 BarUtils
+* `17/07/22` 完善 BarUtils
+* `17/07/21` 完善 xml 文件的格式化
+* `17/07/17` 完善 NetworkUtils 的 isAvailableByPing 函数新增 ip 参数
+* `17/07/14` 修复 FragmentUtils 的 FragmentNode 为 public
+* `17/07/11` 完善 将不常用的工具类放在 subutil 中
+* `17/07/10` 新增 subutil 库
+* `17/07/07` 修复 TimeUtils 中获取当天零点的 bug
+* `17/07/02` 完善 BarUtils 的 Demo
+* `17/07/01` 完善 BarUtils 的 Demo
+* `17/06/30` 完善 BarUtils 的 Demo
+* `17/06/29` 新增 README logo
+* `17/06/28` 新增 返回键及右划返回
+* `17/06/27` 新增 Toolbar
+* `17/06/26` 新增 final 参数
+* `17/06/23` 完善 Demo 主页
+* `17/06/20` 完善 ToastUtil, SnackbarUtils 新增设置底边距
+* `17/06/17` 删除 HandlerUtils
+* `17/06/16` 新增 insight.io 的 bandage
+* `17/06/14` 完善 LogUtils 回退栈,发布 1.7.1 版本
+* `17/06/13` 完善 Snackbar 和 Toast 的 Demo
+* `17/06/12` 完善 Snackbar 为建造者模式
+* `17/06/11` 完善 SpanUtils,发布版本 1.7.0
+* `17/06/08` 完善 SpanUtils
+* `17/06/07` 完善 SpannableStringUtils 改名为 SpanUtils,即将完工
+* `17/06/06` 完善 SpannableStringUtils
+* `17/06/05` 完善 SpannableStringUtils
+* `17/06/04` 完善 SpannableStringUtils
+* `17/06/03` 完善 SpannableStringUtils
+* `17/06/02` 完善 SpannableStringUtils
+* `17/06/01` 完善 KeyBoardUtils 及 Demo
+* `17/05/30` 完善 CrashUtils,发布 1.6.4
+* `17/05/28` 修复 CacheUtils 的 bug,发布 1.6.3
+* `17/05/27` 修复 CacheUtils 的 bug,发布 1.6.2
+* `17/05/26` 完善 CacheUtils,发布 1.6.0 和 1.6.1
+* `17/05/25` 完善 FileIOUtils 和 CacheUtils
+* `17/05/23` 新增 读取文件到字符数组中两种方式
+* `17/05/19` 新增 LogUtils 文件过滤和控制台开关
+* `17/05/16` 新增 ActivityUtils 动画
+* `17/05/12` 新增 base 系列
+* `17/05/11` 修复 SpannableStringUtils 的 setDrawable 的 bug,发布 1.5.1
+* `17/05/10` 完善 7.0 安装 App,完善 AppActivity
+* `17/05/09` 完善 TimeUtils 单元测试
+* `17/05/08` 更新 BarUtils, LogUtils 新增配置文件,TimeUtils 将 pattern 改为 format,发布 1.5.0
+* `17/05/04` 新增 签名
+* `17/05/03` 修复 对齐头部日期
+* `17/05/02` 完善 Demo 的 string 字符串变更,完善 ToastUtils 和 SnackbarUtils
+* `17/04/27` 新增 Travis CI,使用 shields,发布 1.4.1
+* `17/04/26` 完善 HandlerUtils 使用 Handler#CallBack 的回调接口及 SpannableStringUtils 图片对齐
+* `17/04/24` 修复 拼写错误,修复 StringUtils 的 equalsIgnoreCase
+* `17/04/23` 完善 README
+* `17/04/21` 完善 TimeUtils,发布 1.4.0
+* `17/04/20` 新增 SpannableStringUtils 设置字体尺寸
+* `17/03/29` 修改 README
+* `17/03/27` 更新 LogUtils
+* `17/03/26` 更新 LogUtils
+* `17/03/25` 更新 LogUtils
+* `17/03/24` 完善 StringUtils
+* `17/03/20` 修复 链接错误
+* `17/03/19` 新增 LogUtils 栈回溯
+* `17/03/14` 新增 常量包
+* `17/02/14` 完善 FragmentUtils 中,Demo 测试中
+* `17/02/13` 完善 FragmentUtils 中
+* `17/02/12` 完善 FragmentUtils 中
+* `17/02/11` 完善 FragmentUtils 中
+* `17/02/10` 完善 FragmentUtils 中,LogUtils 对长度进行分割
+* `17/02/09` 完善 FragmentUtils 中
+* `17/02/08` 完善 FragmentUtils 中
+* `17/02/07` 完善 FragmentUtils 中
+* `17/02/06` 完善 FragmentUtils 中,炸断肠
+* `17/02/05` 完善 FragmentUtils 中
+* `17/02/04` 完善 FragmentUtils 中
+* `17/02/03` 完善 FragmentUtils 中
+* `17/02/02` 完善 FragmentUtils 中
+* `17/02/01` 完善 FragmentUtils 中
+* `17/01/24` 完善 并发布版本 1.3.6
+* `17/01/16` 新增 LogUtils 打印类名函数名及所在行
+* `17/12/26` 新增 阴历相关工具类
+* `17/12/21` 完善 SpannableStringUtils
+* `16/12/19` 完善 SpannableStringUtils
+* `16/12/18` 完善 SpannableStringUtils,采用构造者模式
+* `16/12/17` 完善 SpannableStringUtils
+* `16/12/16` 完善 拼音工具类
+* `16/12/15` 完善 拼音工具类
+* `16/12/14` 新增 不低于 7.0 的 Html 解码
+* `16/12/13` 新增 获取文件最后修改时间
+* `16/12/12` 新增 Utils 来做初始化 context
+* `16/12/10` 完善 权限中
+* `16/12/09` 新增 6.0 以上权限判断
+* `16/12/07` 修复升级到 6.0 bug 中
+* `16/12/06` 完善 FlashlightUtils 中
+* `16/12/05` 完善 FlashlightUtils 兼容 Api21 之后
+* `16/12/04` 新增 FlashlightUtils
+* `16/12/03` 完善 时间工具类
+* `16/12/02` 新增 获取合适型时间差
+* `16/12/01` 新增 获取生肖和星座
+* `16/11/30` 新增 获取友好型时间差
+* `16/11/23` 完善 LocationUtils 测试,发布 1.3.4
+* `16/11/22` 修复 LocationActivity 内存泄漏
+* `16/11/21` 完善 README
+* `16/11/20` 完善 LocationUtils
+* `16/11/19` 完善 SizeUtils
+* `16/11/18` 完善 LocationUtils
+* `16/11/17` 完善 LocationUtils
+* `16/11/16` 新增 拼音工具类,单独拎出来做了整理
+* `16/11/15` 完善 正则工具类
+* `16/11/14` 新增 启动服务
+* `16/11/13` 新增 判断 sim 卡是否准备好
+* `16/11/12` 新增 重启到 recovery 和 bootloader,新增获取 launcher activity,最近一直在博客搬家,所以更得有点少
+* `16/11/04` 修复 README 的缺少 process 的 bug
+* `16/11/03` 修复 SnackbarUtils 中 Snackbar 持有弱引用来消除内存泄漏
+* `16/11/02` 修复 内存泄漏中
+* `16/11/01` 完善 发布版本 1.3.3 内存泄漏检测中
+* `16/10/31` 完善 发布版本 1.3.1 和 1.3.2
+* `16/10/30` 修复 获取 IpAddress 对于小米手机的 Bug
+* `16/10/29` 新增 文件重命名和完善 root
+* `16/10/23` 完善 测试中
+* `16/10/22` 完善 测试中
+* `16/10/21` 完善 测试中
+* `16/10/20` 完善 测试中
+* `16/10/19` 修复 判断网络是否可用
+* `16/10/18` 完善 是否前台应用,完善网络状态
+* `16/10/17` 修复 获取签名,完善是否前台应用,完善网络状态
+* `16/10/16` 新增 SnackbarUtils
+* `16/10/15` 完善 AppUtils 的 isAppForeground
+* `16/10/14` 完善 README-CN 排版(强迫症一定要对齐)
+* `16/10/13` 完善 测试
+* `16/10/12` 新增 LogUtils 建造者模式,新增获取星期,发布版本 1.3.0,cheer
+* `16/10/11` 新增 EncryptUtils 的 Hmac 系列加密
+* `16/10/10` 完善 LogUtils
+* `16/10/09` 完善 ToastUtils
+* `16/10/08` 新增 AppUtils 静默安装和静默卸载
+* `16/10/07` 完善 EmptyUtils,新增很多判空
+* `16/10/05` 完善 Happy Wedding!
+* `16/10/04` 完善 Readme
+* `16/10/03` 修复 ConvertUtils
+* `16/10/02` 完善 CrashUtils 完毕
+* `16/10/01` 完善 Happy National Day!
+* `16/09/30` 完善 CrashUtils
+* `16/09/29` 完善 CleanUtils 测试完毕
+* `16/09/28` 新增 EmptyUtils,完善 AppUtils 完毕
+* `16/09/27` 新增 CleanUtils,完善 AppUtils
+* `16/09/26` 新增 根据域名获取 ip 地址(在此感谢 jp1017),新增 ClipboardUtils 单元测试,对 ImageUtils 进行了 bug 修复
+* `16/09/25` 新增 ClipboardUtils
+* `16/09/24` 完善 AppUtils
+* `16/09/23` 完善 工具类,新增 ActivityUtils、BarUtils、IntentUtils
+* `16/09/22` 完善 LogUtils 中
+* `16/09/21` 新增 LogUtils
+* `16/09/20` 完善 昨天的单元测试
+* `16/09/19` 新增 CameraUtils,新增获取中文首字母
+* `16/09/18` 修复 少许代码,发布 1.2.1
+* `16/09/15` 完善 Happy Mid-Autumn Festival!
+* `16/09/14` 完善 ImageUtils 完毕,完善了 6.0 及以上版本安装 App 的问题,发布版本 1.2.0
+* `16/09/13` 新增 英文版 README
+* `16/09/12` 完善 ZipUtils 及单元测试完美谢幕(支持空文件夹)
+* `16/09/11` 完善 不断更
+* `16/09/10` 完善 ZipUtils 和单元测试中
+* `16/09/09` 新增 字符串反转,ImageUtils 单元测试卡住中,暂时换为真机测试
+* `16/09/08` 修复 NetworkUtils 报空,ImageUtils 单元测试卡住中
+* `16/08/31` 完善 ImageUtils 单元测试中,之后 7 天鸡儿岭放假,停更
+* `16/08/30` 完善 ImageUtils 单元测试(获取保存图片有问题,卡卡卡住了)
+* `16/08/29` 完善 ImageUtils,新增 stack 模糊算法和快速模糊
+* `16/08/28` 完善 ImageUtils
+* `16/08/27` 完善 ConvertUtils,新增 ZipUtils
+* `16/08/26` 完善 ThreadPoolUtils 线程池相关工具类
+* `16/08/25` 完善 ConstUtils 时间和存储相关常量新增枚举,传参改为枚举更为友好,新增 ThreadPoolUtils 线程池相关工具类
+* `16/08/24` 新增 ConvertUtils 的 InputStream 与 byte[]和 String 相互转换,应用在 FileUtils 中读文件
+* `16/08/23` 修复 bug,接下来完善 SDCardUtils 和 ImageUtils
+* `16/08/22` 完善 SPUtils 将 commit 改为 apply 提高效率,将 SPUtils 改为构造函数法创建,FileUtils 新增查找函数,规范 JavaDoc
+* `16/08/21` 完善 FileUtils 单元测试,修复 FileUtils 的 bug,发布版本 1.1.2
+* `16/08/20` 完善 目录、FileUtils 单元测试,发布版本 1.1.1
+* `16/08/19` 完善 FileUtils 及单元测试,及其他小修小补(在此感谢 vpop 的三次 Pr)
+* `16/08/18` 完善 FileUtils 及单元测试,完善 ImageUtils
+* `16/08/17` 完善 FileUtils
+* `16/08/16` 新增 StringUtils 及单元测试,完善正则工具类,版本更新 1.1.0
+* `16/08/15` 新增 3DES 和 AES 加密及单元检测,加密解密工具类基本完善,目录更新
+* `16/08/14` 新增 DES 加密及单元检测
+* `16/08/13` 新增 MD2,SHA224,SHA256,SHA384,SHA512 加密及单元测试,正折腾 DES 加密
+* `16/08/12` 新增 Base64 和 Html 编码解码及他们的单元测试,新增 TimeUtils 单元测试,更新 md
+* `16/08/11` 新增 SDCardUtils, UnitUtils,单元测试慢慢完善中
+* `16/08/09` 修复 目录排版,新增 Download, Proguard 和 License
+* `16/08/08` 新增 Shell 工具类,已传 jcenter 遇到好多坑,javaDoc 惹的祸,注释一定要规范
+* `16/08/07` 新增 6.0 获取 Mac 地址方法,新增对 HTML 转义,新增编码解码工具类,新增 SP 工具类
+* `16/08/06` 完善 名包名,新增加密相关的单元测试,MD5 加密新增文件加密重载
+* `16/08/05` 新增 MD5 盐加密,完善 NetworkUtils,新增判断状态栏是否存在(在此感谢 tiandawu)
+* `16/08/04` 新增 时间工具类(在此感谢 yi520000 给的补充),手机正则分简单和精确(在此感谢 MIkeeJY),新增判断是否锁屏,注释分段落,目录按首字母排序
+* `16/08/03` 修复 onCreate 中获取 view 尺寸的 bug, MD5 和 SHA 的 Bug 修复完成(在此感谢 ssyijiu)
+* `16/08/02` 修复 wifi 设置界面 bug,注释排版还在修改,获取 mac 地址增加判空,新增 QQ群:74721490,欢迎加入,新增隐藏状态栏,注释更加全面,工具类已封装,写的时候真的是一个一个测试过去的,宝宝心里苦
+* `16/08/01` 新增 获取 SD 卡路径,手机和设备进行分类,代码 bug 修改部分,小修排版,正在封装类,新增目录中显示方法名,新增获取当前 App 版本 Code
+* `16/07/31` 新增 点击屏幕空白区域隐藏软键盘,未能成功增加本页目录跳转功能(不支持)
diff --git a/README-CN.md b/README-CN.md
index 925172aa3c..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]
@@ -32,54 +34,54 @@
## Contact
-[![Blog][blogsvg]][blog] [![jianshu][jianshusvg]][jianshu] [![weibo][weibosvg]][weibo] [![QQ0Group][qq0groupsvg]][qq0group] [![QQ1Group][qq1groupsvg]][qq1group]
+[![Blog][blogSvg]][blog] [![jianshu][jianshuSvg]][jianshu] [![weibo][weiboSvg]][weibo] [![QQGroup][qqgroupSvg]][qqgroup]
+
+
+## [Change Log][changeLog.md]
-## [Update Log][update_log.md]
+## 打个小广告
+欢迎加入我的小专栏「**[基你太美](https://xiaozhuanlan.com/Blankj)**」一起学习。
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
-[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.14.0-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
+[apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
+[result]: https://android-arsenal.com/result?level=14
-[buildsvg]: https://travis-ci.org/Blankj/AndroidUtilCode.svg?branch=master
+[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
+[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
-[update_log.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/update_log.md
+[changeLog.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/CHANGELOG.md
[donate]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/donate.png
-[blogsvg]: https://img.shields.io/badge/Blog-@Blankj-34a48e.svg
+[blogSvg]: https://img.shields.io/badge/Blog-@Blankj-34a48e.svg
[blog]: http://blankj.com
-[jianshusvg]: https://img.shields.io/badge/简书-@Blankj-34a48e.svg
+[jianshuSvg]: https://img.shields.io/badge/简书-@Blankj-34a48e.svg
[jianshu]: http://www.jianshu.com/u/46702d5c6978
-[weibosvg]: https://img.shields.io/badge/weibo-@__Blankj-34a48e.svg
+[weiboSvg]: https://img.shields.io/badge/weibo-@__Blankj-34a48e.svg
[weibo]: http://weibo.com/3076228982
-[qq0groupsvg]: https://img.shields.io/badge/QQ群0(满)-74721490-ff73a3.svg
-[qq0group]: https://shang.qq.com/wpa/qunwpa?idkey=62baf2c3ec6b0863155b0c7a10c71bba2608cb0b6532fc18515835e54c69bdd3
-
-[qq1groupsvg]: https://img.shields.io/badge/QQ群1-25206533-ff73a3.svg
-[qq1group]: https://shang.qq.com/wpa/qunwpa?idkey=d906789f84484465e2736f7b524366b4c23afeda38733d5c7b10fc3f6e406e9b
+[qqgroupSvg]: https://img.shields.io/badge/QQ群-25206533-34a48e.svg
+[qqgroup]: https://shang.qq.com/wpa/qunwpa?idkey=d906789f84484465e2736f7b524366b4c23afeda38733d5c7b10fc3f6e406e9b
diff --git a/README.md b/README.md
index fa5a140f96..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]
@@ -32,54 +34,54 @@ If this project helps you a lot and you want to support the project's developmen
## Contact
-[![Blog][blogsvg]][blog] [![jianshu][jianshusvg]][jianshu] [![weibo][weibosvg]][weibo] [![QQ0Group][qq0groupsvg]][qq0group] [![QQ1Group][qq1groupsvg]][qq1group]
+[![Blog][blogSvg]][blog] [![jianshu][jianshuSvg]][jianshu] [![weibo][weiboSvg]][weibo] [![QQGroup][qqgroupSvg]][qqgroup]
+
+
+## [Change Log][changeLog.md]
-## [Update Log][update_log.md]
+## 打个小广告
+欢迎加入我的小专栏「**[基你太美](https://xiaozhuanlan.com/Blankj)**」一起学习。
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
-[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.14.0-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
+[apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
+[result]: https://android-arsenal.com/result?level=14
-[buildsvg]: https://travis-ci.org/Blankj/AndroidUtilCode.svg?branch=master
+[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
+[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
-[update_log.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/update_log.md
+[changeLog.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/CHANGELOG.md
[donate]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/donate.png
-[blogsvg]: https://img.shields.io/badge/Blog-@Blankj-34a48e.svg
+[blogSvg]: https://img.shields.io/badge/Blog-@Blankj-34a48e.svg
[blog]: http://blankj.com
-[jianshusvg]: https://img.shields.io/badge/简书-@Blankj-34a48e.svg
+[jianshuSvg]: https://img.shields.io/badge/简书-@Blankj-34a48e.svg
[jianshu]: http://www.jianshu.com/u/46702d5c6978
-[weibosvg]: https://img.shields.io/badge/weibo-@__Blankj-34a48e.svg
+[weiboSvg]: https://img.shields.io/badge/weibo-@__Blankj-34a48e.svg
[weibo]: http://weibo.com/3076228982
-[qq0groupsvg]: https://img.shields.io/badge/QQ0群(满)-74721490-ff73a3.svg
-[qq0group]: https://shang.qq.com/wpa/qunwpa?idkey=62baf2c3ec6b0863155b0c7a10c71bba2608cb0b6532fc18515835e54c69bdd3
-
-[qq1groupsvg]: https://img.shields.io/badge/QQ1群-25206533-ff73a3.svg
-[qq1group]: https://shang.qq.com/wpa/qunwpa?idkey=d906789f84484465e2736f7b524366b4c23afeda38733d5c7b10fc3f6e406e9b
+[qqgroupSvg]: https://img.shields.io/badge/QQ群-25206533-34a48e.svg
+[qqgroup]: https://shang.qq.com/wpa/qunwpa?idkey=d906789f84484465e2736f7b524366b4c23afeda38733d5c7b10fc3f6e406e9b
diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100644
index 4e8949fa8c..0000000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,63 +0,0 @@
-apply plugin: 'com.android.application'
-
-File signPropertiesFile = file('sign/keystore.properties')
-
-android {
- compileSdkVersion compile_sdk_version
- defaultConfig {
- applicationId "com.blankj.androidutilcode"
- minSdkVersion min_sdk_version
- targetSdkVersion target_sdk_version
- versionCode version_code
- versionName version_name
- }
-
- if (signPropertiesFile.exists()) {
- 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 {
- minifyEnabled true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- if (signPropertiesFile.exists()) {
- signingConfig signingConfigs.release
- }
- }
- }
-
- sourceSets {
- main {
- res.srcDirs('src/main/res', 'src/main/res_core', 'src/main/res_sub')
- }
- }
-
- lintOptions {
- abortOnError false
- }
-}
-
-dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation project(':utilcode')
- implementation project(':subutil')
-
- implementation "com.android.support:appcompat-v7:$support_version"
- implementation "com.android.support:design:$support_version"
- implementation 'com.r0adkll:slidableactivity:2.0.5'
- // LeakCanary
- debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakcanary_version"
- releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version"
-// implementation 'com.blankj:utilcode:1.14.0'
-}
-
-
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
deleted file mode 100644
index 4b21d4819f..0000000000
--- a/app/proguard-rules.pro
+++ /dev/null
@@ -1,29 +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 *;
-#}
--keep class com.blankj.utilcode.** { *; }
--keepclassmembers class com.blankj.utilcode.** { *; }
--dontwarn com.blankj.utilcode.**
-
-# Gson
--keepattributes Signature
--keepattributes *Annotation*
--keep class sun.misc.Unsafe { *; }
--keep class com.google.gson.stream.** { *; }
-# 使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。
-# 将下面替换成自己的实体类
-#-keep class com.example.bean.** { *; }
\ 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 e4954bb8b3..0000000000
--- a/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/10 - * desc : 配置常量 - *- */ -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 ece5fb1fd3..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/UtilsApp.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.blankj.androidutilcode; - -import android.annotation.SuppressLint; - -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; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/12 - * desc : 工具类测试 App - *- */ -public class UtilsApp extends BaseApplication { - - private static UtilsApp sInstance; - - public static UtilsApp getInstance() { - return sInstance; - } - - @Override - public void onCreate() { - super.onCreate(); - sInstance = this; - com.blankj.utilcode.util.Utils.init(this); - com.blankj.subutil.util.Utils.init(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-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 - LogUtils.d(config.toString()); - } - - @SuppressLint("MissingPermission") - private void initCrash() { - CrashUtils.init(new CrashUtils.OnCrashListener() { - @Override - public void onCrash(String crashInfo, Throwable e) { - LogUtils.e(crashInfo); - AppUtils.relaunchApp(); - } - }); - } -} - - diff --git a/app/src/main/java/com/blankj/androidutilcode/base/BaseActivity.java b/app/src/main/java/com/blankj/androidutilcode/base/BaseActivity.java deleted file mode 100644 index 66ad8355f1..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/BaseActivity.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.blankj.androidutilcode.base; - -import android.app.Activity; -import android.os.Bundle; -import android.support.annotation.LayoutRes; -import android.support.v7.app.AppCompatActivity; -import android.view.LayoutInflater; -import android.view.View; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/24 - * desc : 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(); - } - - 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 : 基类 App - *- */ -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 855a62acc9..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/BaseBackActivity.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.blankj.androidutilcode.base; - -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 : DrawerActivity 基类 - *- */ -public abstract class BaseBackActivity extends BaseActivity { - - protected CoordinatorLayout rootLayout; - protected Toolbar mToolbar; - protected AppBarLayout abl; - protected FrameLayout flActivityContainer; - - @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); - 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 a45800ce63..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/base/BaseDrawerActivity.java +++ /dev/null @@ -1,55 +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; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/06/27 - * desc : DrawerActivity 基类 - *- */ -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: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Config.GITHUB))); - break; - case R.id.action_blog: - 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 774d2fccb2..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 : Fragment-v4 基类 - *- */ -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 : - *- */ -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 9c9f49c0a3..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 : 数据管理器 - *- */ -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 : MainActivity - *- */ -public class CoreUtilActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, CoreUtilActivity.class); - context.startActivity(starter.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } - - @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) { - 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 appClick(View view) { - AppActivity.start(this); - } - - public void barClick(View view) { - BarActivity.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 networkClick(View view) { - NetworkActivity.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 screenClick(View view) { - ScreenActivity.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 6806f77d0e..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 : Activity 工具类 Demo - *- */ -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(ActivityActivity.class), SpanUtils.ALIGN_CENTER) - .appendLine() - .append("getActivityLogo: ") - .appendImage(ActivityUtils.getActivityLogo(ActivityActivity.class), 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 e330f37372..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 : Activity 工具类 Demo - *- */ -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/app/AppActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/app/AppActivity.java deleted file mode 100644 index fa93e2565f..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/app/AppActivity.java +++ /dev/null @@ -1,142 +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.AssertHelper; -import com.blankj.androidutilcode.helper.PermissionHelper; -import com.blankj.utilcode.util.AppUtils; -import com.blankj.utilcode.util.SpanUtils; -import com.blankj.utilcode.util.ToastUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : App 工具类 Demo - *- */ - -public class AppActivity extends BaseBackActivity { - - public static void start(Context context) { - Intent starter = new Intent(context, AppActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @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()) - .append("getAppSignatureSHA1: " + AppUtils.getAppSignatureSHA1()) - .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() { - AssertHelper.releaseInstallApk(new AssertHelper.OnReleasedListener() { - @Override - public void onReleased() { - AppUtils.installApp(Config.TEST_APK_PATH); - } - }); - } - }); - } - 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; - } - } -} diff --git a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarActivity.java deleted file mode 100644 index cd8996c360..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarActivity.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.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseBackActivity; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : Bar 工具类 Demo - *- */ -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 952353f62d..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarNavActivity.java +++ /dev/null @@ -1,118 +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.support.v4.content.ContextCompat; -import android.view.View; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -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 : Activity 工具类 Demo - *- */ -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_immersive).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: - BarUtils.setNavBarVisibility(this, true); - BarUtils.setStatusBarColor(this, ContextCompat.getColor(UtilsApp.getInstance(), R.color.colorPrimary), 0); - BarUtils.addMarginTopEqualStatusBarHeight(rootLayout); - break; - case R.id.btn_nav_hide: - BarUtils.setNavBarVisibility(this, false); - break; - case R.id.btn_nav_immersive: - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - BarUtils.setNavBarImmersive(this); - } - break; - case R.id.btn_nav_set_color: - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - BarUtils.setNavBarColor(this, Color.rgb(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)) - .append("getNavBarColor: #" + Integer.toHexString(BarUtils.getNavBarColor(this))) - .create() - ); - } else { - tvAboutNav.setText(new SpanUtils() - .appendLine("navHeight: " + BarUtils.getNavBarHeight()) - .appendLine("isNavBarVisible: " + BarUtils.isNavBarVisible(this)) - .create() - ); - } - } - - @RequiresApi(api = Build.VERSION_CODES.KITKAT) - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - BarUtils.setNavBarImmersive(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 3586d52e80..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 : Activity 工具类 Demo - *- */ -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 402a5e9418..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 : Activity 工具类 Demo - *- */ -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 fa36cc3590..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 : Bar 工具类 Demo - *- */ -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 1f1e1db3b6..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 : Bar 工具类 Demo - *- */ -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 23dfc2de69..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 : Bar 工具类 Demo - *- */ -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 c0c379909a..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 : Bar 工具类 Demo - *- */ -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/BarStatusDrawerActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusDrawerActivity.java deleted file mode 100644 index 3a94edac8d..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 : Bar 工具类 Demo - *- */ -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.bg_bar); - } 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 e24e6b81c9..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusFragmentActivity.java +++ /dev/null @@ -1,131 +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 : Bar 工具类 Demo - *- */ -public class BarStatusFragmentActivity extends BaseActivity { - - private int[] itemIds = new int[]{ - R.id.navigation_color, - R.id.navigation_alpha, - R.id.navigation_image_view - }; - - private ViewPager mVpStatusBar; - private BottomNavigationView navigation; - private ArrayList
- * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : Bar 工具类 Demo - *- */ -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 4d2f367714..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 : Bar 工具类 Demo - *- */ -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 a3a437c16d..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 : Bar 工具类 Demo - *- */ -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.bg_bar); - } 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 a702331b5f..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 : Clean 工具类 Demo - *- */ -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 ba093cbcfe..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/device/DeviceActivity.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.blankj.androidutilcode.feature.core.device; - -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.DeviceUtils; -import com.blankj.utilcode.util.SpanUtils; - -import java.util.Arrays; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : Device 工具类 Demo - *- */ -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); - 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 60b7ad1a44..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 : - *- */ -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 4606b43577..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 : - *- */ -@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 9103192d7c..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 : Fragment 工具类 Demo - *- */ -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 31ab79c001..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 : - *- */ -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 8fb75137fb..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 : - *- */ -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 72562a89c0..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 : - *- */ -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 6acd1fe0a4..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.BaseBackActivity; -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 : Image 工具类 Demo - *- */ -public class ImageActivity extends BaseBackActivity { - - Bitmap src; - List
- * author: Blankj - * blog : http://blankj.com - * time : 2017/09/18 - * desc : - *- */ -public class ImageAdapter extends SingleAdapter
- * author: Blankj - * blog : http://blankj.com - * time : 2017/09/18 - * desc : - *- */ -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 41ab5bd963..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/keyboard/KeyboardActivity.java +++ /dev/null @@ -1,125 +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.MotionEvent; -import android.view.View; -import android.view.inputmethod.InputMethodManager; -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 : Keyboard 工具类 Demo - *- */ -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) { - getToolBar().setTitle(getString(R.string.demo_keyboard)); - - 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; - } -} 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 e2bf7cbd8e..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/log/LogActivity.java +++ /dev/null @@ -1,284 +0,0 @@ -package com.blankj.androidutilcode.feature.core.log; - -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 android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.UtilsApp; -import com.blankj.androidutilcode.base.BaseBackActivity; -import com.blankj.utilcode.util.LogUtils; - - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2017/03/22 - * desc : Log 工具类 Demo - *- */ -public class LogActivity extends BaseBackActivity { - - private static final String TAG = "CMJ"; - - private TextView tvAboutLog; - - private LogUtils.Config mConfig = LogUtils.getConfig(); - - private String dir = ""; - private String globalTag = ""; - private boolean log = true; - private boolean console = true; - private boolean head = true; - private boolean file = false; - private boolean border = true; - private boolean single = true; - private int consoleFilter = LogUtils.V; - private int fileFilter = LogUtils.V; - - 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 Runnable mRunnable = new Runnable() { - @Override - public void run() { - LogUtils.v("verbose"); - LogUtils.d("debug"); - LogUtils.i("info"); - LogUtils.w("warn"); - LogUtils.e("error"); - LogUtils.a("assert"); - } - }; - - private static final String longStr; - - static { - StringBuilder sb = new StringBuilder(); - sb.append("len = 10400\ncontent = \""); - for (int i = 0; i < 800; ++i) { - sb.append("Hello world. "); - } - sb.append("\""); - longStr = sb.toString(); - } - - public static void start(Context context) { - Intent starter = new Intent(context, LogActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_log; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_log)); - - tvAboutLog = findViewById(R.id.tv_about_log); - findViewById(R.id.btn_toggle_log).setOnClickListener(this); - findViewById(R.id.btn_toggle_console).setOnClickListener(this); - findViewById(R.id.btn_toggle_tag).setOnClickListener(this); - findViewById(R.id.btn_toggle_head).setOnClickListener(this); - findViewById(R.id.btn_toggle_border).setOnClickListener(this); - findViewById(R.id.btn_toggle_single).setOnClickListener(this); - findViewById(R.id.btn_toggle_file).setOnClickListener(this); - findViewById(R.id.btn_toggle_dir).setOnClickListener(this); - findViewById(R.id.btn_toggle_conole_filter).setOnClickListener(this); - findViewById(R.id.btn_toggle_file_filter).setOnClickListener(this); - findViewById(R.id.btn_log_no_tag).setOnClickListener(this); - findViewById(R.id.btn_log_with_tag).setOnClickListener(this); - findViewById(R.id.btn_log_in_new_thread).setOnClickListener(this); - findViewById(R.id.btn_log_null).setOnClickListener(this); - findViewById(R.id.btn_log_many_params).setOnClickListener(this); - findViewById(R.id.btn_log_long).setOnClickListener(this); - findViewById(R.id.btn_log_file).setOnClickListener(this); - findViewById(R.id.btn_log_json).setOnClickListener(this); - findViewById(R.id.btn_log_xml).setOnClickListener(this); - updateConfig(0); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_toggle_log: - updateConfig(UPDATE_LOG); - break; - case R.id.btn_toggle_console: - updateConfig(UPDATE_CONSOLE); - break; - case R.id.btn_toggle_tag: - updateConfig(UPDATE_TAG); - break; - case R.id.btn_toggle_head: - updateConfig(UPDATE_HEAD); - break; - case R.id.btn_toggle_file: - updateConfig(UPDATE_FILE); - break; - case R.id.btn_toggle_dir: - updateConfig(UPDATE_DIR); - break; - case R.id.btn_toggle_border: - updateConfig(UPDATE_BORDER); - break; - case R.id.btn_toggle_single: - updateConfig(UPDATE_SINGLE); - break; - case R.id.btn_toggle_conole_filter: - updateConfig(UPDATE_CONSOLE_FILTER); - break; - case R.id.btn_toggle_file_filter: - updateConfig(UPDATE_FILE_FILTER); - break; - case R.id.btn_log_no_tag: - LogUtils.v("verbose"); - LogUtils.d("debug"); - LogUtils.i("info"); - LogUtils.w("warn"); - LogUtils.e("error"); - LogUtils.a("assert"); - break; - case R.id.btn_log_with_tag: - LogUtils.vTag("customTag", "verbose"); - LogUtils.dTag("customTag", "debug"); - LogUtils.iTag("customTag", "info"); - LogUtils.wTag("customTag", "warn"); - LogUtils.eTag("customTag", "error"); - LogUtils.aTag("customTag", "assert"); - break; - case R.id.btn_log_in_new_thread: - Thread thread = new Thread(mRunnable); - thread.start(); - break; - case R.id.btn_log_null: - LogUtils.v((Object) null); - LogUtils.d((Object) null); - LogUtils.i((Object) null); - LogUtils.w((Object) null); - LogUtils.e((Object) null); - LogUtils.a((Object) null); - break; - case R.id.btn_log_many_params: - LogUtils.v("verbose0", "verbose1"); - LogUtils.vTag("customTag", "verbose0", "verbose1"); - LogUtils.d("debug0", "debug1"); - LogUtils.dTag("customTag", "debug0", "debug1"); - LogUtils.i("info0", "info1"); - LogUtils.iTag("customTag", "info0", "info1"); - LogUtils.w("warn0", "warn1"); - LogUtils.wTag("customTag", "warn0", "warn1"); - LogUtils.e("error0", "error1"); - LogUtils.eTag("customTag", "error0", "error1"); - LogUtils.a("assert0", "assert1"); - LogUtils.aTag("customTag", "assert0", "assert1"); - break; - case R.id.btn_log_long: - LogUtils.d(longStr); - break; - case R.id.btn_log_file: - for (int i = 0; i < 100; i++) { - LogUtils.file("test0 log to file"); - LogUtils.file(LogUtils.I, "test0 log to file"); - } - break; - case R.id.btn_log_json: - 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/" }]}"; - LogUtils.json(json); - LogUtils.json(LogUtils.I, json); - break; - case R.id.btn_log_xml: - String xml = "
- * author: Blankj - * blog : http://blankj.com - * time : 2016/10/13 - * desc : Network 工具类 Demo - *- */ -public class NetworkActivity extends BaseBackActivity { - - TextView tvAboutNetwork; - TextView tvAboutNetworkAsync; - ThreadPoolUtils threadPoolUtils = new ThreadPoolUtils(ThreadPoolUtils.SingleThread, 1); - - Handler mHandler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { - String text = tvAboutNetworkAsync.getText().toString(); - if (text.length() != 0) { - text += '\n'; - } - if (msg.what == 1) { - tvAboutNetworkAsync.setText(new SpanUtils() - .append(text + "isAvailableByPing: " + msg.obj) - .create() - ); - } else { - tvAboutNetworkAsync.setText(new SpanUtils() - .append(text + "getDomainAddress: " + msg.obj) - .create() - ); - } - return true; - } - }); - - public static void start(Context context) { - Intent starter = new Intent(context, NetworkActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_network; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - getToolBar().setTitle(getString(R.string.demo_network)); - - tvAboutNetwork = findViewById(R.id.tv_about_network); - tvAboutNetworkAsync = findViewById(R.id.tv_about_network_async); - findViewById(R.id.btn_open_wireless_settings).setOnClickListener(this); - findViewById(R.id.btn_set_wifi_enabled).setOnClickListener(this); - updateAboutNetwork(); - } - - @Override - public void doBusiness() { - threadPoolUtils.execute(new Runnable() { - @Override - public void run() { - Message msg = Message.obtain(); - msg.what = 1; - msg.obj = NetworkUtils.isAvailableByPing(); - mHandler.sendMessage(msg); - } - }); - - threadPoolUtils.execute(new Runnable() { - @Override - public void run() { - Message msg = Message.obtain(); - msg.what = 2; - msg.obj = NetworkUtils.getDomainAddress("baidu.com"); - mHandler.sendMessage(msg); - } - }); - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_open_wireless_settings: - NetworkUtils.openWirelessSettings(); - break; - case R.id.btn_set_data_enabled: - NetworkUtils.setMobileDataEnabled(!NetworkUtils.getMobileDataEnabled()); - break; - case R.id.btn_set_wifi_enabled: - NetworkUtils.setWifiEnabled(!NetworkUtils.getWifiEnabled()); - break; - } - updateAboutNetwork(); - } - - private void updateAboutNetwork() { - tvAboutNetwork.setText(new SpanUtils() - .appendLine("isConnected: " + NetworkUtils.isConnected()) - .appendLine("getMobileDataEnabled: " + NetworkUtils.getMobileDataEnabled()) - .appendLine("isMobileData: " + NetworkUtils.isMobileData()) - .appendLine("is4G: " + NetworkUtils.is4G()) - .appendLine("getWifiEnabled: " + NetworkUtils.getWifiEnabled()) - .appendLine("isWifiConnected: " + NetworkUtils.isWifiConnected()) - .appendLine("isWifiAvailable: " + NetworkUtils.isWifiAvailable()) - .appendLine("getNetworkOperatorName: " + NetworkUtils.getNetworkOperatorName()) - .appendLine("getNetworkTypeName: " + NetworkUtils.getNetworkType()) - .append("getIPAddress: " + NetworkUtils.getIPAddress(true)) - .create() - ); - } - - @Override - protected void onDestroy() { - threadPoolUtils.shutDownNow(); - mHandler.removeCallbacksAndMessages(null); - super.onDestroy(); - } -} 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 a050175b26..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/permission/PermissionActivity.java +++ /dev/null @@ -1,152 +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 : Permission 工具类 Demo - *- */ -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); - - 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 : Phone 工具类 Demo - *- */ -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() { - @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() { - @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 878778ee4a..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 : Process 工具类 Demo - *- */ -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 : - *- */ -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 a721479d90..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 : - *- */ -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/screen/ScreenActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/core/screen/ScreenActivity.java deleted file mode 100644 index 96459305d2..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/screen/ScreenActivity.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.blankj.androidutilcode.feature.core.screen; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.blankj.androidutilcode.R; -import com.blankj.androidutilcode.base.BaseActivity; -import com.blankj.utilcode.util.ScreenUtils; -import com.blankj.utilcode.util.SpanUtils; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : Screen 工具类 Demo - *- */ -public class ScreenActivity extends BaseActivity { - - ImageView ivScreenshot; - TextView tvAboutScreen; - - public static void start(Context context) { - Intent starter = new Intent(context, ScreenActivity.class); - context.startActivity(starter); - } - - @Override - public void initData(@Nullable Bundle bundle) { - - } - - @Override - public int bindLayout() { - return R.layout.activity_screen; - } - - @Override - public void initView(Bundle savedInstanceState, View contentView) { - ivScreenshot = findViewById(R.id.iv_screenshot); - tvAboutScreen = findViewById(R.id.tv_about_screen); - findViewById(R.id.btn_set_fullscreen).setOnClickListener(this); - findViewById(R.id.btn_set_landscape).setOnClickListener(this); - findViewById(R.id.btn_set_portrait).setOnClickListener(this); - findViewById(R.id.btn_screenshot).setOnClickListener(this); - findViewById(R.id.btn_set_sleep_duration).setOnClickListener(this); - - updateAboutScreen(); - } - - @Override - public void doBusiness() { - - } - - @Override - public void onWidgetClick(View view) { - switch (view.getId()) { - case R.id.btn_set_fullscreen: - ScreenUtils.setFullScreen(this); - break; - case R.id.btn_set_landscape: - ScreenUtils.setLandscape(this); - break; - case R.id.btn_set_portrait: - ScreenUtils.setPortrait(this); - break; - case R.id.btn_screenshot: - ivScreenshot.setImageBitmap(ScreenUtils.screenShot(this)); - break; - case R.id.btn_set_sleep_duration: - ScreenUtils.setSleepDuration(100000); - updateAboutScreen(); - break; - } - } - - private void updateAboutScreen() { - tvAboutScreen.setText(new SpanUtils() - .appendLine("getScreenWidth: " + ScreenUtils.getScreenWidth()) - .appendLine("getScreenHeight: " + ScreenUtils.getScreenHeight()) - .appendLine("isLandscape: " + ScreenUtils.isLandscape()) - .appendLine("isPortrait: " + ScreenUtils.isPortrait()) - .appendLine("getScreenRotation: " + ScreenUtils.getScreenRotation(this)) - .appendLine("isScreenLock: " + ScreenUtils.isScreenLock()) - .appendLine("getSleepDuration: " + ScreenUtils.getSleepDuration()) - .append("isTablet: " + ScreenUtils.isTablet()) - .create() - ); - } -} 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 097339ace1..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 : SDCard 工具类 Demo - *- */ -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 98963f4d59..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 : Snackbar 工具类 Demo - *- */ -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.shape_top_round_rect) - .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.shape_top_round_rect) - .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.shape_top_round_rect) - .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.shape_top_round_rect) - .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.shape_top_round_rect) - .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.shape_top_round_rect) - .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 cc70972846..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 : SP 工具类 Demo - *- */ -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 75938f3656..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/BlurMaskFilterSpan.java +++ /dev/null @@ -1,31 +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; - -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 ffe1f1624f..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/core/span/ForegroundAlphaColorSpan.java +++ /dev/null @@ -1,26 +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; - -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 d02f7620c4..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 : 2017/06/11 - * desc : - *- */ -public class ForegroundAlphaColorSpanGroup { - - private final float mAlpha; - - private final ArrayList
- * author: Blankj - * blog : http://blankj.com - * time : 2016/09/27 - * desc : Span 工具类 Demo - *- */ -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 tvAboutAnimRainbow; - - 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); - tvAboutAnimRainbow = 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() - .appendLine("SpanUtils").setBackgroundColor(Color.LTGRAY).setBold().setForegroundColor(Color.YELLOW).setAlign(Layout.Alignment.ALIGN_CENTER) - .appendLine("前景色").setForegroundColor(Color.GREEN) - .appendLine("背景色").setBackgroundColor(Color.LTGRAY) - .appendLine("行高顶部对齐").setLineHeight(2 * lineHeight, SpanUtils.ALIGN_TOP).setBackgroundColor(Color.GREEN) - .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) - - .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) - - .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 - tvAboutAnimRainbow.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() { - 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 18c402b69d..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 : 自定义 Toast - *- */ -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 07565db46c..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 : Toast 工具类 Demo - *- */ -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.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 2e188504ab..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/feature/sub/SubUtilActivity.java +++ /dev/null @@ -1,66 +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.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 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 1ebc98f086..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 : - *- */ -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/location/LocationActivity.java b/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationActivity.java deleted file mode 100755 index 2168d330a6..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 : Location 工具类 Demo - *- */ -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 a114ec4257..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 : Location 服务 - *- */ -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 470a11ea00..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 : Pinyin 工具类 Demo - *- */ -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/AssertHelper.java b/app/src/main/java/com/blankj/androidutilcode/helper/AssertHelper.java deleted file mode 100644 index 8e517c4db6..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/helper/AssertHelper.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.blankj.androidutilcode.helper; - -import com.blankj.androidutilcode.Config; -import com.blankj.subutil.util.ThreadPoolUtils; -import com.blankj.utilcode.util.FileIOUtils; -import com.blankj.utilcode.util.FileUtils; -import com.blankj.utilcode.util.LogUtils; -import com.blankj.utilcode.util.Utils; - -import java.io.IOException; - -/** - *
- * author: Blankj - * blog : http://blankj.com - * time : 2018/01/07 - * desc : - *- */ -public class AssertHelper { - - public static void releaseInstallApk(final OnReleasedListener listener) { - if (!FileUtils.isFileExists(Config.TEST_APK_PATH)) { - ThreadPoolUtils poolUtils = new ThreadPoolUtils(ThreadPoolUtils.SingleThread, 1); - poolUtils.execute(new Runnable() { - @Override - public void run() { - try { - FileIOUtils.writeFileFromIS( - Config.TEST_APK_PATH, - Utils.getApp().getAssets().open("test_install"), - false - ); - } catch (IOException e) { - e.printStackTrace(); - } - if (listener != null) { - listener.onReleased(); - } - } - }); - } else { - if (listener != null) { - listener.onReleased(); - } - LogUtils.d("test apk existed."); - } - } - - public interface OnReleasedListener { - void onReleased(); - } -} 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 0e9d657b74..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/helper/DialogHelper.java +++ /dev/null @@ -1,106 +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 : 对话框工具类 - *- */ -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 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 54f377ca4a..0000000000 --- a/app/src/main/java/com/blankj/androidutilcode/helper/PermissionHelper.java +++ /dev/null @@ -1,85 +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 : 权限帮助类 - *- */ -public class PermissionHelper { - - 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 : 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/subutil/.gitignore b/feature/main/app/.gitignore similarity index 100% rename from subutil/.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/feature/main/app/proguard-rules.pro b/feature/main/app/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/feature/main/app/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/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/feature/main/pkg/.gitignore b/feature/main/pkg/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/feature/main/pkg/.gitignore @@ -0,0 +1 @@ +/build diff --git a/feature/main/pkg/build.gradle b/feature/main/pkg/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/feature/main/pkg/proguard-rules.pro b/feature/main/pkg/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/feature/main/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/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/feature/subutil/app/.gitignore b/feature/subutil/app/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/feature/subutil/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/feature/subutil/app/build.gradle b/feature/subutil/app/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/feature/subutil/app/proguard-rules.pro b/feature/subutil/app/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/feature/subutil/app/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/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/feature/subutil/pkg/.gitignore b/feature/subutil/pkg/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/feature/subutil/pkg/.gitignore @@ -0,0 +1 @@ +/build 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