From 12a006fb37523f53cdad0e0f8202cc782898ca6f Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Sat, 29 Dec 2018 19:17:37 +0800
Subject: [PATCH] see 12/29 log
---
CHANGELOG.md | 3 +
README-CN.md | 2 +-
README.md | 2 +-
bus-gradle-plugin/project.properties | 6 --
config.gradle | 4 +-
lib/base/build.gradle | 2 +-
.../java/com/blankj/lib/base/BaseActivity.kt | 15 +---
.../blankj/subutil/util/VibrationUtils.java | 49 -------------
.../com/blankj/subutil/util/TestUtils.java | 2 +-
.../subutil/pkg/helper/DialogHelper.java | 4 +-
utilcode/README-CN.md | 19 ++++-
utilcode/README-STATIC-BUS.md | 2 +-
utilcode/README.md | 19 ++++-
.../blankj/utilcode/util/AntiShakeUtils.java | 36 +++++++++
.../com/blankj/utilcode/util/ImageUtils.java | 4 +-
.../com/blankj/utilcode/util/ToastUtils.java | 31 ++++----
.../blankj/utilcode/util/VibrateUtils.java | 69 ++++++++++++++++++
utilcode/pkg/src/main/AndroidManifest.xml | 5 ++
.../pkg/feature/CoreUtilActivity.java | 5 ++
.../pkg/feature/toast/ToastActivity.java | 24 ++++--
.../pkg/feature/vibrate/VibrateActivity.kt | 59 +++++++++++++++
.../utilcode/pkg/helper/DialogHelper.java | 11 ++-
.../pkg/src/main/res/drawable/image_lena.jpg | Bin 0 -> 53220 bytes
.../pkg/src/main/res/drawable/image_lena.png | Bin 109948 -> 0 bytes
.../main/res/layout/activity_util_core.xml | 7 ++
.../src/main/res/layout/activity_vibrate.xml | 30 ++++++++
utilcode/pkg/src/main/res/values/strings.xml | 6 ++
27 files changed, 308 insertions(+), 108 deletions(-)
delete mode 100755 bus-gradle-plugin/project.properties
delete mode 100644 subutil/lib/src/main/java/com/blankj/subutil/util/VibrationUtils.java
create mode 100644 utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
create mode 100644 utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
create mode 100644 utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt
create mode 100644 utilcode/pkg/src/main/res/drawable/image_lena.jpg
delete mode 100644 utilcode/pkg/src/main/res/drawable/image_lena.png
create mode 100644 utilcode/pkg/src/main/res/layout/activity_vibrate.xml
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0012fe5a..359cfd2f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+* `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.
diff --git a/README-CN.md b/README-CN.md
index 09c5ba26..7e6d7503 100644
--- a/README-CN.md
+++ b/README-CN.md
@@ -41,7 +41,7 @@
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
-[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.7-brightgreen.svg
+[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.9-brightgreen.svg
[auc]: https://github.com/Blankj/AndroidUtilCode
[apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
diff --git a/README.md b/README.md
index ad4d21a9..c32e2f53 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ If this project helps you a lot and you want to support the project's developmen
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
-[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.7-brightgreen.svg
+[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.9-brightgreen.svg
[auc]: https://github.com/Blankj/AndroidUtilCode
[apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
diff --git a/bus-gradle-plugin/project.properties b/bus-gradle-plugin/project.properties
deleted file mode 100755
index 23eb9a74..00000000
--- a/bus-gradle-plugin/project.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-project.name=StaticBusPlugin
-project.siteUrl=https://github.com/Blankj/StaticBus
-project.gitUrl=https://github.com/Blankj/StaticBus.git
-
-#javadoc
-javadoc.name=StaticBus
\ No newline at end of file
diff --git a/config.gradle b/config.gradle
index c5ccd57c..4042b33e 100644
--- a/config.gradle
+++ b/config.gradle
@@ -5,8 +5,8 @@ ext {
compileSdkVersion = 27
minSdkVersion = 14
targetSdkVersion = 27
- versionCode = 1_022_007
- versionName = '1.22.7'// E.g. 1.9.72 => 1,009,072
+ versionCode = 1_022_009
+ versionName = '1.22.9'// E.g. 1.9.72 => 1,009,072
bus = [
isDebug: false,
diff --git a/lib/base/build.gradle b/lib/base/build.gradle
index 66409f31..404c4ae6 100644
--- a/lib/base/build.gradle
+++ b/lib/base/build.gradle
@@ -15,5 +15,5 @@ dependencies {
api dep.free_proguard
api 'com.r0adkll:slidableactivity:2.0.5'
compileOnly dep.leakcanary.android_no_op
-// api 'com.blankj:utilcode:1.22.7'
+// api 'com.blankj:utilcode:1.22.9'
}
\ No newline at end of file
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt
index ec8180a3..84ade12a 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt
@@ -5,6 +5,7 @@ import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.LayoutInflater
import android.view.View
+import com.blankj.utilcode.util.AntiShakeUtils
/**
* ```
@@ -18,16 +19,6 @@ abstract class BaseActivity : AppCompatActivity(), IBaseView {
protected lateinit var mContentView: View
protected lateinit var mActivity: Activity
- private var lastClick: Long = 0// the time of last click
- private val isFastClick: Boolean
- get() {
- val now = System.currentTimeMillis()
- if (now - lastClick >= 200) {
- lastClick = now
- return false
- }
- return true
- }
override fun onCreate(savedInstanceState: Bundle?) {
mActivity = this
@@ -45,6 +36,8 @@ abstract class BaseActivity : AppCompatActivity(), IBaseView {
}
override fun onClick(view: View) {
- if (!isFastClick) onWidgetClick(view)
+ if (AntiShakeUtils.isValid(view, 200)) {
+ onWidgetClick(view)
+ }
}
}
\ No newline at end of file
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/VibrationUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/VibrationUtils.java
deleted file mode 100644
index 0985367c..00000000
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/VibrationUtils.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.blankj.subutil.util;
-
-/**
- *
- * author: Blankj
- * blog : http://blankj.com
- * time : 2016/09/29
- * desc : 震动相关工具类
- *
- */
-public final class VibrationUtils {
-
-// private VibrationUtils() {
-// throw new UnsupportedOperationException("u can't instantiate me...");
-// }
-//
-// /**
-// * 震动
-// * 需添加权限 {@code }
-// *
-// * @param context 上下文
-// * @param milliseconds 振动时长
-// */
-// public static void vibrate(final Context context, final long milliseconds) {
-// Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
-// vibrator.vibrate(milliseconds);
-// }
-//
-// /**
-// * 指定手机以pattern模式振动
-// *
-// * @param context
-// * @param pattern new long[]{400,800,1200,1600},就是指定在400ms、800ms、1200ms、1600ms这些时间点交替启动、关闭手机振动器
-// * @param repeat 指定pattern数组的索引,指定pattern数组中从repeat索引开始的振动进行循环。-1表示只振动一次,非-1表示从 pattern的指定下标开始重复振动。
-// */
-// public static void vibrate(final Context context, final long[] pattern, final int repeat) {
-// Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
-// vibrator.vibrate(pattern, repeat);
-// }
-//
-// /**
-// * 取消振动
-// *
-// * @param context 上下文
-// */
-// public static void cancel(final Context context) {
-// ((Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE)).cancel();
-// }
-}
diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/TestUtils.java b/subutil/lib/src/test/java/com/blankj/subutil/util/TestUtils.java
index 6f308ce9..5e094129 100644
--- a/subutil/lib/src/test/java/com/blankj/subutil/util/TestUtils.java
+++ b/subutil/lib/src/test/java/com/blankj/subutil/util/TestUtils.java
@@ -24,6 +24,6 @@ public class TestUtils {
@Test
public void test() throws Exception {
- System.out.println(-1 << 2);
+
}
}
\ No newline at end of file
diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.java b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.java
index e755a55c..217fe9fa 100644
--- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.java
+++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.java
@@ -21,7 +21,7 @@ public class DialogHelper {
public static void showRationaleDialog(final ShouldRequest shouldRequest) {
Activity topActivity = ActivityUtils.getTopActivity();
- if (topActivity == null) return;
+ if (topActivity == null || topActivity.isFinishing()) return;
new AlertDialog.Builder(topActivity)
.setTitle(android.R.string.dialog_alert_title)
.setMessage(R.string.permission_rationale_message)
@@ -45,7 +45,7 @@ public class DialogHelper {
public static void showOpenAppSettingDialog() {
Activity topActivity = ActivityUtils.getTopActivity();
- if (topActivity == null) return;
+ if (topActivity == null || topActivity.isFinishing()) return;
new AlertDialog.Builder(topActivity)
.setTitle(android.R.string.dialog_alert_title)
.setMessage(R.string.permission_denied_forever_message)
diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md
index e01e5b5f..fb8ae7cd 100644
--- a/utilcode/README-CN.md
+++ b/utilcode/README-CN.md
@@ -2,7 +2,7 @@
Gradle:
```groovy
-implementation 'com.blankj:utilcode:1.22.7'
+implementation 'com.blankj:utilcode:1.22.9'
```
@@ -35,6 +35,11 @@ pt2Px : pt 转 px
px2Pt : px 转 pt
```
+* ### AntiShake 相关 -> [AntiShakeUtils.java][antiShake.java]
+```
+isValid: 是否有效
+```
+
* ### App 相关 -> [AppUtils.java][app.java] -> [Demo][app.demo]
```
registerAppStatusChangedListener : 注册 App 前后台切换监听器
@@ -799,6 +804,12 @@ file2Uri: file 转 uri
uri2File: uri 转 file
```
+* ### 震动相关 -> [VibrateUtils.java][vibrate.java] -> [Demo][demo.demo]
+```
+vibrate: 震动
+cancel : 取消
+```
+
* ### 压缩相关 -> [ZipUtils.java][zip.java] -> [Test][zip.test]
```
zipFiles : 批量压缩文件
@@ -813,11 +824,12 @@ getComments : 获取压缩文件中的注释链表
[activity.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.java
-[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.java
[adaptScreen.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java
[adaptScreen.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
+[antiShake.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
+
[app.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
[app.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.java
@@ -943,5 +955,8 @@ getComments : 获取压缩文件中的注释链表
[uri.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+[vibrate.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
+[vibrate.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.java
+
[zip.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/ZipUtils.java
[zip.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java
diff --git a/utilcode/README-STATIC-BUS.md b/utilcode/README-STATIC-BUS.md
index 01b81e08..e79fa339 100644
--- a/utilcode/README-STATIC-BUS.md
+++ b/utilcode/README-STATIC-BUS.md
@@ -27,7 +27,7 @@ apply plugin: "com.blankj.bus"
给 base 模块添加 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 依赖:
```groovy
-api "com.blankj:utilcode:1.22.7"
+api "com.blankj:utilcode:1.22.9"
```
比如 module0 中存在的 `Module0Activity.java`,我们通常都是在它内部写一个 `start` 函数来启动它,现在我们给它添加 `@BusUtils.Subscribe` 注解,并给注解的 `name` 赋唯一值,要注意,函数务必要 `public static` 哦:
diff --git a/utilcode/README.md b/utilcode/README.md
index b0596b0d..acacb716 100644
--- a/utilcode/README.md
+++ b/utilcode/README.md
@@ -2,7 +2,7 @@
Gradle:
```groovy
-implementation 'com.blankj:utilcode:1.22.7'
+implementation 'com.blankj:utilcode:1.22.9'
```
@@ -35,6 +35,11 @@ pt2Px
px2Pt
```
+* ### About AntiShake -> [AntiShakeUtils.java][antiShake.java]
+```
+isValid
+```
+
* ### About App -> [AppUtils.java][app.java] -> [Demo][app.demo]
```
registerAppStatusChangedListener
@@ -799,6 +804,12 @@ file2Uri
uri2File
```
+* ### About Vibrate -> [VibrateUtils.java][vibrate.java] -> [Demo][demo.demo]
+```
+vibrate
+cancel
+```
+
* ### About Zip -> [ZipUtils.java][zip.java] -> [Test][zip.test]
```
zipFiles
@@ -813,11 +824,12 @@ getComments
[activity.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.java
-[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.java
[adaptScreen.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java
[adaptScreen.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
+[antiShake.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
+
[app.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
[app.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.java
@@ -943,5 +955,8 @@ getComments
[uri.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+[vibrate.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
+[vibrate.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.java
+
[zip.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/ZipUtils.java
[zip.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
new file mode 100644
index 00000000..eae40f04
--- /dev/null
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
@@ -0,0 +1,36 @@
+package com.blankj.utilcode.util;
+
+import android.support.annotation.IntRange;
+import android.support.annotation.NonNull;
+import android.view.View;
+
+/**
+ *
+ * author: blankj
+ * blog : http://blankj.com
+ * time : 2018/12/29
+ * desc : utils about anti shake
+ *
+ */
+public class AntiShakeUtils {
+
+ private static final long DEFAULT_DURATION = 200;
+ private static final int TAG_KEY = 0x7EFFFFFF;
+
+ private AntiShakeUtils() {
+ throw new UnsupportedOperationException("u can't instantiate me...");
+ }
+
+ public static boolean isValid(@NonNull View view) {
+ return isValid(view, DEFAULT_DURATION);
+ }
+
+ public static boolean isValid(@NonNull View view, @IntRange(from = 0) long duration) {
+ long curTime = System.currentTimeMillis();
+ Object tag = view.getTag(TAG_KEY);
+ view.setTag(TAG_KEY, curTime);
+ if (!(tag instanceof Long)) return true;
+ long preTime = (Long) tag;
+ return curTime - preTime > duration;
+ }
+}
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
index a7fe4747..bea4c384 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
@@ -690,7 +690,9 @@ public final class ImageUtils {
rectF.inset((width - size) / 2f, (height - size) / 2f);
Matrix matrix = new Matrix();
matrix.setTranslate(rectF.left, rectF.top);
- matrix.preScale((float) size / width, (float) size / height);
+ if (width != height) {
+ matrix.preScale((float) size / width, (float) size / height);
+ }
BitmapShader shader = new BitmapShader(src, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
shader.setLocalMatrix(matrix);
paint.setShader(shader);
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
index 108ecf18..0cf7c2f6 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
@@ -2,10 +2,8 @@ package com.blankj.utilcode.util;
import android.annotation.SuppressLint;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
@@ -421,17 +419,18 @@ public final class ToastUtils {
static class ToastWithoutNotification extends AbsToast {
- private Dialog mDialog;
- private WindowManager mWM;
private View mView;
+ private WindowManager mWM;
+ private Dialog mDialog;
private WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
- private Utils.OnActivityDestroyedListener listener =
+ private static final Utils.OnActivityDestroyedListener LISTENER =
new Utils.OnActivityDestroyedListener() {
@Override
public void onActivityDestroyed(Activity activity) {
- cancel();
+ if (iToast == null) return;
+ iToast.cancel();
}
};
@@ -447,8 +446,7 @@ public final class ToastUtils {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mParams.type = WindowManager.LayoutParams.TYPE_TOAST;
- mParams.y = mToast.getYOffset();
- } else {
+ } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.N_MR1) {
Context topActivityOrApp = Utils.getTopActivityOrApp();
if (!(topActivityOrApp instanceof Activity)) {
Log.e("ToastUtils", "Couldn't get top Activity.");
@@ -461,15 +459,15 @@ public final class ToastUtils {
}
if (topActivity.hasWindowFocus()) {
mWM = topActivity.getWindowManager();
- mParams.type = WindowManager.LayoutParams.LAST_SUB_WINDOW;
- mParams.y = mToast.getYOffset() + getNavBarHeight();
+ mParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
} else {
mDialog = new Dialog(topActivity, R.style.DialogTransparent);
mDialog.setContentView(mView);
- Window window = mDialog.getWindow();
- mParams.y = mToast.getYOffset();
}
- Utils.getActivityLifecycle().addOnActivityDestroyedListener(topActivity, listener);
+ Utils.getActivityLifecycle().addOnActivityDestroyedListener(topActivity, LISTENER);
+ } else {
+ mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ mParams.type = WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW + 37;
}
final Configuration config = context.getResources().getConfiguration();
@@ -480,6 +478,7 @@ public final class ToastUtils {
gravity = mToast.getGravity();
}
+ mParams.y = mToast.getYOffset();
mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mParams.format = PixelFormat.TRANSLUCENT;
@@ -500,7 +499,10 @@ public final class ToastUtils {
mParams.packageName = Utils.getApp().getPackageName();
if (mDialog != null) {
- mDialog.getWindow().setAttributes(mParams);
+ Window window = mDialog.getWindow();
+ if (window == null) return;
+ mParams.windowAnimations = android.R.style.Animation_Dialog;
+ window.setAttributes(mParams);
mDialog.show();
} else {
try {
@@ -510,7 +512,6 @@ public final class ToastUtils {
} catch (Exception ignored) { /**/ }
}
-
HANDLER.postDelayed(new Runnable() {
@Override
public void run() {
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
new file mode 100644
index 00000000..a57bbb82
--- /dev/null
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
@@ -0,0 +1,69 @@
+package com.blankj.utilcode.util;
+
+import android.content.Context;
+import android.os.Vibrator;
+import android.support.annotation.RequiresPermission;
+
+import static android.Manifest.permission.VIBRATE;
+
+/**
+ *
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2016/09/29
+ * desc : utils about vibrate
+ *
+ */
+public final class VibrateUtils {
+
+ private static Vibrator vibrator;
+
+ private VibrateUtils() {
+ throw new UnsupportedOperationException("u can't instantiate me...");
+ }
+
+ /**
+ * Vibrate.
+ * Must hold {@code }
+ *
+ * @param milliseconds The number of milliseconds to vibrate.
+ */
+ @RequiresPermission(VIBRATE)
+ public static void vibrate(final long milliseconds) {
+ Vibrator vibrator = getVibrator();
+ if (vibrator == null) return;
+ vibrator.vibrate(milliseconds);
+ }
+
+ /**
+ * Vibrate.
+ * Must hold {@code }
+ *
+ * @param pattern An array of longs of times for which to turn the vibrator on or off.
+ * @param repeat The index into pattern at which to repeat, or -1 if you don't want to repeat.
+ */
+ @RequiresPermission(VIBRATE)
+ public static void vibrate(final long[] pattern, final int repeat) {
+ Vibrator vibrator = getVibrator();
+ if (vibrator == null) return;
+ vibrator.vibrate(pattern, repeat);
+ }
+
+ /**
+ * Cancel vibrate.
+ * Must hold {@code }
+ */
+ @RequiresPermission(VIBRATE)
+ public static void cancel() {
+ Vibrator vibrator = getVibrator();
+ if (vibrator == null) return;
+ vibrator.cancel();
+ }
+
+ private static Vibrator getVibrator() {
+ if (vibrator == null) {
+ vibrator = (Vibrator) Utils.getApp().getSystemService(Context.VIBRATOR_SERVICE);
+ }
+ return vibrator;
+ }
+}
diff --git a/utilcode/pkg/src/main/AndroidManifest.xml b/utilcode/pkg/src/main/AndroidManifest.xml
index 1bf57026..84de944f 100644
--- a/utilcode/pkg/src/main/AndroidManifest.xml
+++ b/utilcode/pkg/src/main/AndroidManifest.xml
@@ -31,6 +31,8 @@
+
+
+
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
literal 0
HcmV?d00001
diff --git a/utilcode/pkg/src/main/res/drawable/image_lena.png b/utilcode/pkg/src/main/res/drawable/image_lena.png
deleted file mode 100644
index fa49ea640b5fc72cbb70445de5481a51867f3d55..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 109948
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