提交 12a006fb 编写于 作者: B Blankj

see 12/29 log

上级 877bbc4c
* `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.
......
......@@ -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
......
......@@ -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
......
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
......@@ -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,
......
......@@ -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
......@@ -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
package com.blankj.subutil.util;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2016/09/29
* desc : 震动相关工具类
* </pre>
*/
public final class VibrationUtils {
// private VibrationUtils() {
// throw new UnsupportedOperationException("u can't instantiate me...");
// }
//
// /**
// * 震动
// * <p>需添加权限 {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
// *
// * @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();
// }
}
......@@ -24,6 +24,6 @@ public class TestUtils {
@Test
public void test() throws Exception {
System.out.println(-1 << 2);
}
}
\ No newline at end of file
......@@ -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)
......
......@@ -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
......@@ -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` 哦:
......
......@@ -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
package com.blankj.utilcode.util;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.view.View;
/**
* <pre>
* author: blankj
* blog : http://blankj.com
* time : 2018/12/29
* desc : utils about anti shake
* </pre>
*/
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;
}
}
......@@ -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);
......
......@@ -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() {
......
package com.blankj.utilcode.util;
import android.content.Context;
import android.os.Vibrator;
import android.support.annotation.RequiresPermission;
import static android.Manifest.permission.VIBRATE;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2016/09/29
* desc : utils about vibrate
* </pre>
*/
public final class VibrateUtils {
private static Vibrator vibrator;
private VibrateUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
/**
* Vibrate.
* <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
*
* @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.
* <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
*
* @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.
* <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
*/
@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;
}
}
......@@ -31,6 +31,8 @@
<!-- process -->
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<!-- vibrate -->
<uses-permission android:name="android.permission.VIBRATE" />
<application>
<activity
android:name=".feature.CoreUtilActivity"
......@@ -159,6 +161,9 @@
<activity
android:name=".feature.toast.ToastActivity"
android:launchMode="singleTop" />
<activity
android:name=".feature.vibrate.VibrateActivity"
android:launchMode="singleTop" />
<meta-data
android:name="app_meta_data"
......
......@@ -32,6 +32,7 @@ import com.blankj.utilcode.pkg.feature.snackbar.SnackbarActivity;
import com.blankj.utilcode.pkg.feature.sp.SPActivity;
import com.blankj.utilcode.pkg.feature.span.SpanActivity;
import com.blankj.utilcode.pkg.feature.toast.ToastActivity;
import com.blankj.utilcode.pkg.feature.vibrate.VibrateActivity;
import com.blankj.utilcode.util.BusUtils;
/**
......@@ -178,4 +179,8 @@ public class CoreUtilActivity extends BaseBackActivity {
public void toastClick(View view) {
ToastActivity.start(this);
}
public void vibrateClick(View view) {
VibrateActivity.Companion.start(this);
}
}
......@@ -4,13 +4,14 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.view.Gravity;
import android.view.View;
import com.blankj.utilcode.pkg.R;
import com.blankj.lib.base.BaseBackActivity;
import com.blankj.utilcode.pkg.R;
import com.blankj.utilcode.pkg.helper.DialogHelper;
import com.blankj.utilcode.util.SpanUtils;
import com.blankj.utilcode.util.ToastUtils;
......@@ -61,6 +62,8 @@ public class ToastActivity extends BaseBackActivity {
}
Handler mHandler = new Handler();
@Override
public void onWidgetClick(View view) {
resetToast();
......@@ -74,12 +77,19 @@ public class ToastActivity extends BaseBackActivity {
}).start();
} else if (i == R.id.btn_show_long_toast) {
new Thread(new Runnable() {
@Override
public void run() {
ToastUtils.showLong(R.string.toast_long);
}
}).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
for (int j = 0; j < 10; j++) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
ToastUtils.showLong(R.string.toast_long);
}
}, 10 * j);
}
// }
// }).start();
} else if (i == R.id.btn_show_green_font) {
ToastUtils.setMsgColor(Color.GREEN);
......
package com.blankj.utilcode.pkg.feature.vibrate
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import com.blankj.lib.base.BaseBackActivity
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.VibrateUtils
import kotlinx.android.synthetic.main.activity_vibrate.*
/**
* ```
* author: Blankj
* blog : http://blankj.com
* time : 2018/12/29
* desc : demo about VibrateUtils
* ```
*/
class VibrateActivity : BaseBackActivity() {
companion object {
fun start(context: Context) {
val starter = Intent(context, VibrateActivity::class.java)
context.startActivity(starter)
}
}
override fun initData(bundle: Bundle?) {
}
override fun bindLayout(): Int {
return R.layout.activity_vibrate
}
override fun initView(savedInstanceState: Bundle?, contentView: View) {
setTitle(R.string.demo_vibrate)
vibrate1000msBtn.setOnClickListener { VibrateUtils.vibrate(1000) }
vibrateCustomBtn.setOnClickListener {
VibrateUtils.vibrate(longArrayOf(1000, 1000, 2000, 2000, 1000), 1)
}
vibrateCancelBtn.setOnClickListener { VibrateUtils.cancel() }
}
override fun doBusiness() {
}
override fun onWidgetClick(view: View) {
}
override fun onDestroy() {
super.onDestroy()
VibrateUtils.cancel()
}
}
......@@ -5,7 +5,6 @@ import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.blankj.utilcode.pkg.R;
......@@ -27,7 +26,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)
......@@ -51,7 +50,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)
......@@ -74,7 +73,7 @@ public class DialogHelper {
public static void showAdaptScreenDialog() {
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("Message!")
......@@ -97,7 +96,7 @@ public class DialogHelper {
public static void showKeyboardDialog() {
Activity topActivity = ActivityUtils.getTopActivity();
if (topActivity == null) return;
if (topActivity == null || topActivity.isFinishing()) 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();
......@@ -131,7 +130,7 @@ public class DialogHelper {
public static void showToastDialog() {
Activity topActivity = ActivityUtils.getTopActivity();
if (topActivity == null) return;
if (topActivity == null || topActivity.isFinishing()) return;
final View dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_toast, null);
dialogView.findViewById(R.id.btn_show_short_toast)
.setOnClickListener(new View.OnClickListener() {
......
......@@ -182,4 +182,11 @@
android:onClick="toastClick"
android:text="@string/demo_toast" />
<Button
style="@style/WideBtnStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="vibrateClick"
android:text="@string/demo_vibrate" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="@dimen/spacing_16">
<Button
android:id="@+id/vibrate1000msBtn"
style="@style/WideBtnStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/vibrate_1000ms" />
<Button
android:id="@+id/vibrateCustomBtn"
style="@style/WideBtnStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/vibrate_custom" />
<Button
android:id="@+id/vibrateCancelBtn"
style="@style/WideBtnStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/vibrate_cancel" />
</LinearLayout>
......@@ -26,6 +26,7 @@
<string name="demo_sp">SP Demo</string>
<string name="demo_span">SpanUtils Demo</string>
<string name="demo_toast">ToastUtils Demo</string>
<string name="demo_vibrate">VibrateUtils Demo</string>
<!--Activity 相关-->
<string name="activity_shared_element">Shared Element</string>
......@@ -293,4 +294,9 @@
<string name="toast_custom_bg">Custom Bg</string>
<string name="toast_span">Spannable String</string>
<string name="toast_middle">Middle</string>
<!--Vibrate 相关-->
<string name="vibrate_1000ms">Vibrate 1000ms</string>
<string name="vibrate_custom">Vibrate Custom</string>
<string name="vibrate_cancel">Cancel</string>
</resources>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册