提交 a509f949 编写于 作者: B Blankj

see 10/26 log

上级 c7f9b2df
* `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.
......
......@@ -14,8 +14,8 @@ class Config {
static compileSdkVersion = 29
static minSdkVersion = 14
static targetSdkVersion = 29
static versionCode = 1_030_000
static versionName = '1.30.0'// E.g. 1.9.72 => 1,009,072
static versionCode = 1_030_001
static versionName = '1.30.1'// E.g. 1.9.72 => 1,009,072
// lib version
static gradlePluginVersion = '3.5.0'
......
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.CommonItem
import com.blankj.common.item.CommonItemClick
import com.blankj.common.item.CommonItemImage
import com.blankj.common.item.CommonItemTitle
import com.blankj.common.item.*
import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.pkg.Config
import com.blankj.utilcode.pkg.R
......@@ -21,7 +19,9 @@ import com.blankj.utilcode.util.*
* desc : demo about AppUtils
* ```
*/
class AppActivity : CommonActivity() {
class AppActivity : CommonActivity(), Utils.OnAppStatusChangedListener {
var isRegisterAppStatusChangedListener: Boolean = false
companion object {
fun start(context: Context) {
......@@ -54,6 +54,14 @@ class AppActivity : CommonActivity() {
override fun bindItems(): MutableList<CommonItem<*>> {
return CollectionUtils.newArrayList(
CommonItemSwitch("registerAppStatusChangedListener", { isRegisterAppStatusChangedListener }, {
isRegisterAppStatusChangedListener = it
if (it) {
AppUtils.registerAppStatusChangedListener(this)
} else {
AppUtils.unregisterAppStatusChangedListener(this)
}
}),
CommonItemTitle("isAppRoot", AppUtils.isAppRoot().toString()),
CommonItemTitle("isAppDebug", AppUtils.isAppDebug().toString()),
CommonItemTitle("isAppSystem", AppUtils.isAppSystem().toString()),
......@@ -105,6 +113,21 @@ class AppActivity : CommonActivity() {
}
)
}
override fun onForeground(activity: Activity) {
ToastUtils.showShort("onForeground\n${activity.javaClass.simpleName}")
}
override fun onBackground(activity: Activity) {
ToastUtils.showShort("onBackground\n${activity.javaClass.simpleName}")
}
override fun onDestroy() {
super.onDestroy()
if (isRegisterAppStatusChangedListener) {
AppUtils.unregisterAppStatusChangedListener(this)
}
}
}
class ReleaseInstallApkTask(private val mListener: OnReleasedListener) : ThreadUtils.SimpleTask<Unit>() {
......
......@@ -2,10 +2,10 @@
Gradle:
```groovy
implementation 'com.blankj:utilcode:1.30.0'
implementation 'com.blankj:utilcode:1.30.1'
// if u use AndroidX, use the following
implementation 'com.blankj:utilcodex:1.30.0'
implementation 'com.blankj:utilcodex:1.30.1'
```
......@@ -1181,6 +1181,7 @@ make.setRightIcon : 设置右侧图标
make.setBottomIcon : 设置底部图标
make.setNotUseSystemToast: 设置不使用系统吐司
make.show : 显示吐司
getDefaultMaker : 获取默认制作实例(控制 showShort、showLong 样式)
showShort : 显示短时吐司
showLong : 显示长时吐司
cancel : 取消吐司显示
......
......@@ -2,10 +2,10 @@
Gradle:
```groovy
implementation 'com.blankj:utilcode:1.30.0'
implementation 'com.blankj:utilcode:1.30.1'
// if u use AndroidX, use the following
implementation 'com.blankj:utilcodex:1.30.0'
implementation 'com.blankj:utilcodex:1.30.1'
```
......@@ -1181,6 +1181,7 @@ make.setRightIcon
make.setBottomIcon
make.setNotUseSystemToast
make.show
getDefaultMaker
showShort
showLong
cancel
......
......@@ -41,7 +41,7 @@ public final class PermissionConstants {
permission.READ_CONTACTS, permission.WRITE_CONTACTS, permission.GET_ACCOUNTS
};
private static final String[] GROUP_LOCATION = {
permission.ACCESS_FINE_LOCATION, permission.ACCESS_COARSE_LOCATION
permission.ACCESS_FINE_LOCATION, permission.ACCESS_COARSE_LOCATION, permission.ACCESS_BACKGROUND_LOCATION
};
private static final String[] GROUP_MICROPHONE = {
permission.RECORD_AUDIO
......
......@@ -159,7 +159,7 @@ public final class ActivityUtils {
* @param clz The activity class.
*/
public static void startActivity(@NonNull final Class<? extends Activity> clz) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, null, context.getPackageName(), clz.getName(), null);
}
......@@ -171,7 +171,7 @@ public final class ActivityUtils {
*/
public static void startActivity(@NonNull final Class<? extends Activity> clz,
@Nullable final Bundle options) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, null, context.getPackageName(), clz.getName(), options);
}
......@@ -187,7 +187,7 @@ public final class ActivityUtils {
public static void startActivity(@NonNull final Class<? extends Activity> clz,
@AnimRes final int enterAnim,
@AnimRes final int exitAnim) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, null, context.getPackageName(), clz.getName(),
getOptionsBundle(context, enterAnim, exitAnim));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN && context instanceof Activity) {
......@@ -263,7 +263,7 @@ public final class ActivityUtils {
*/
public static void startActivity(@NonNull final Bundle extras,
@NonNull final Class<? extends Activity> clz) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, extras, context.getPackageName(), clz.getName(), null);
}
......@@ -277,7 +277,7 @@ public final class ActivityUtils {
public static void startActivity(@NonNull final Bundle extras,
@NonNull final Class<? extends Activity> clz,
@Nullable final Bundle options) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, extras, context.getPackageName(), clz.getName(), options);
}
......@@ -295,7 +295,7 @@ public final class ActivityUtils {
@NonNull final Class<? extends Activity> clz,
@AnimRes final int enterAnim,
@AnimRes final int exitAnim) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, extras, context.getPackageName(), clz.getName(),
getOptionsBundle(context, enterAnim, exitAnim));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN && context instanceof Activity) {
......@@ -379,7 +379,7 @@ public final class ActivityUtils {
*/
public static void startActivity(@NonNull final String pkg,
@NonNull final String cls) {
startActivity(UtilsBridge.getTopActivityOrApp(), null, pkg, cls, null);
startActivity(getTopActivityOrApp(), null, pkg, cls, null);
}
/**
......@@ -392,7 +392,7 @@ public final class ActivityUtils {
public static void startActivity(@NonNull final String pkg,
@NonNull final String cls,
@Nullable final Bundle options) {
startActivity(UtilsBridge.getTopActivityOrApp(), null, pkg, cls, options);
startActivity(getTopActivityOrApp(), null, pkg, cls, options);
}
/**
......@@ -409,7 +409,7 @@ public final class ActivityUtils {
@NonNull final String cls,
@AnimRes final int enterAnim,
@AnimRes final int exitAnim) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, null, pkg, cls, getOptionsBundle(context, enterAnim, exitAnim));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN && context instanceof Activity) {
((Activity) context).overridePendingTransition(enterAnim, exitAnim);
......@@ -492,7 +492,7 @@ public final class ActivityUtils {
public static void startActivity(@NonNull final Bundle extras,
@NonNull final String pkg,
@NonNull final String cls) {
startActivity(UtilsBridge.getTopActivityOrApp(), extras, pkg, cls, null);
startActivity(getTopActivityOrApp(), extras, pkg, cls, null);
}
/**
......@@ -507,7 +507,7 @@ public final class ActivityUtils {
@NonNull final String pkg,
@NonNull final String cls,
@Nullable final Bundle options) {
startActivity(UtilsBridge.getTopActivityOrApp(), extras, pkg, cls, options);
startActivity(getTopActivityOrApp(), extras, pkg, cls, options);
}
/**
......@@ -526,7 +526,7 @@ public final class ActivityUtils {
@NonNull final String cls,
@AnimRes final int enterAnim,
@AnimRes final int exitAnim) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivity(context, extras, pkg, cls, getOptionsBundle(context, enterAnim, exitAnim));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN && context instanceof Activity) {
((Activity) context).overridePendingTransition(enterAnim, exitAnim);
......@@ -613,7 +613,7 @@ public final class ActivityUtils {
* @return {@code true}: success<br>{@code false}: fail
*/
public static boolean startActivity(@NonNull final Intent intent) {
return startActivity(intent, UtilsBridge.getTopActivityOrApp(), null);
return startActivity(intent, getTopActivityOrApp(), null);
}
/**
......@@ -625,7 +625,7 @@ public final class ActivityUtils {
*/
public static boolean startActivity(@NonNull final Intent intent,
@Nullable final Bundle options) {
return startActivity(intent, UtilsBridge.getTopActivityOrApp(), options);
return startActivity(intent, getTopActivityOrApp(), options);
}
/**
......@@ -641,7 +641,7 @@ public final class ActivityUtils {
public static boolean startActivity(@NonNull final Intent intent,
@AnimRes final int enterAnim,
@AnimRes final int exitAnim) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
boolean isSuccess = startActivity(intent, context, getOptionsBundle(context, enterAnim, exitAnim));
if (isSuccess) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN && context instanceof Activity) {
......@@ -1333,7 +1333,7 @@ public final class ActivityUtils {
* @param intents The descriptions of the activities to start.
*/
public static void startActivities(@NonNull final Intent[] intents) {
startActivities(intents, UtilsBridge.getTopActivityOrApp(), null);
startActivities(intents, getTopActivityOrApp(), null);
}
/**
......@@ -1344,7 +1344,7 @@ public final class ActivityUtils {
*/
public static void startActivities(@NonNull final Intent[] intents,
@Nullable final Bundle options) {
startActivities(intents, UtilsBridge.getTopActivityOrApp(), options);
startActivities(intents, getTopActivityOrApp(), options);
}
/**
......@@ -1359,7 +1359,7 @@ public final class ActivityUtils {
public static void startActivities(@NonNull final Intent[] intents,
@AnimRes final int enterAnim,
@AnimRes final int exitAnim) {
Context context = UtilsBridge.getTopActivityOrApp();
Context context = getTopActivityOrApp();
startActivities(intents, context, getOptionsBundle(context, enterAnim, exitAnim));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN && context instanceof Activity) {
((Activity) context).overridePendingTransition(enterAnim, exitAnim);
......@@ -2117,4 +2117,13 @@ public final class ActivityUtils {
}
return ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs).toBundle();
}
private static Context getTopActivityOrApp() {
if (UtilsBridge.isAppForeground()) {
Activity topActivity = getTopActivity();
return topActivity == null ? Utils.getApp() : topActivity;
} else {
return Utils.getApp();
}
}
}
......@@ -179,18 +179,7 @@ public final class AppUtils {
* @return {@code true}: yes<br>{@code false}: no
*/
public static boolean isAppForeground() {
ActivityManager am = (ActivityManager) Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE);
if (am == null) return false;
List<ActivityManager.RunningAppProcessInfo> info = am.getRunningAppProcesses();
if (info == null || info.size() == 0) return false;
for (ActivityManager.RunningAppProcessInfo aInfo : info) {
if (aInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
if (aInfo.processName.equals(Utils.getApp().getPackageName())) {
return true;
}
}
}
return false;
return UtilsBridge.isAppForeground();
}
/**
......
......@@ -17,7 +17,7 @@ import java.util.concurrent.ConcurrentHashMap;
* desc : utils about debouncing
* </pre>
*/
class DebouncingUtils {
public class DebouncingUtils {
private static final int CACHE_SIZE = 64;
private static final Map<String, Long> KEY_MILLIS_MAP = new ConcurrentHashMap<>(CACHE_SIZE);
......
......@@ -57,11 +57,11 @@ public final class ToastUtils {
String DARK = "dark";
}
private static final String TAG_TOAST = "TAG_TOAST";
private static final int COLOR_DEFAULT = 0xFEFFFFFF;
private static final String NULL = "toast null";
private static final String NOTHING = "toast nothing";
private static final ToastUtils DEFAULT_TOAST_UTILS = make();
private static final String TAG_TOAST = "TAG_TOAST";
private static final int COLOR_DEFAULT = 0xFEFFFFFF;
private static final String NULL = "toast null";
private static final String NOTHING = "toast nothing";
private static final ToastUtils DEFAULT_MAKER = make();
private static IToast iToast;
......@@ -258,6 +258,15 @@ public final class ToastUtils {
return this;
}
/**
* Return the default {@link ToastUtils} instance.
*
* @return the default {@link ToastUtils} instance
*/
public static ToastUtils getDefaultMaker() {
return DEFAULT_MAKER;
}
/**
* Show the toast for a short period of time.
*
......@@ -351,7 +360,7 @@ public final class ToastUtils {
* @param text The text.
*/
public static void showShort(final CharSequence text) {
show(text, Toast.LENGTH_SHORT, DEFAULT_TOAST_UTILS);
show(text, Toast.LENGTH_SHORT, DEFAULT_MAKER);
}
/**
......@@ -360,7 +369,7 @@ public final class ToastUtils {
* @param resId The resource id for text.
*/
public static void showShort(@StringRes final int resId) {
show(UtilsBridge.getString(resId), Toast.LENGTH_SHORT, DEFAULT_TOAST_UTILS);
show(UtilsBridge.getString(resId), Toast.LENGTH_SHORT, DEFAULT_MAKER);
}
/**
......@@ -370,7 +379,7 @@ public final class ToastUtils {
* @param args The args.
*/
public static void showShort(@StringRes final int resId, final Object... args) {
show(UtilsBridge.getString(resId, args), Toast.LENGTH_SHORT, DEFAULT_TOAST_UTILS);
show(UtilsBridge.getString(resId, args), Toast.LENGTH_SHORT, DEFAULT_MAKER);
}
/**
......@@ -380,7 +389,7 @@ public final class ToastUtils {
* @param args The args.
*/
public static void showShort(final String format, final Object... args) {
show(UtilsBridge.format(format, args), Toast.LENGTH_SHORT, DEFAULT_TOAST_UTILS);
show(UtilsBridge.format(format, args), Toast.LENGTH_SHORT, DEFAULT_MAKER);
}
/**
......@@ -389,7 +398,7 @@ public final class ToastUtils {
* @param text The text.
*/
public static void showLong(final CharSequence text) {
show(text, Toast.LENGTH_LONG, DEFAULT_TOAST_UTILS);
show(text, Toast.LENGTH_LONG, DEFAULT_MAKER);
}
/**
......@@ -398,7 +407,7 @@ public final class ToastUtils {
* @param resId The resource id for text.
*/
public static void showLong(@StringRes final int resId) {
show(UtilsBridge.getString(resId), Toast.LENGTH_LONG, DEFAULT_TOAST_UTILS);
show(UtilsBridge.getString(resId), Toast.LENGTH_LONG, DEFAULT_MAKER);
}
/**
......@@ -408,7 +417,7 @@ public final class ToastUtils {
* @param args The args.
*/
public static void showLong(@StringRes final int resId, final Object... args) {
show(UtilsBridge.getString(resId), Toast.LENGTH_LONG, DEFAULT_TOAST_UTILS);
show(UtilsBridge.getString(resId), Toast.LENGTH_LONG, DEFAULT_MAKER);
}
/**
......@@ -418,7 +427,7 @@ public final class ToastUtils {
* @param args The args.
*/
public static void showLong(final String format, final Object... args) {
show(UtilsBridge.format(format, args), Toast.LENGTH_LONG, DEFAULT_TOAST_UTILS);
show(UtilsBridge.format(format, args), Toast.LENGTH_LONG, DEFAULT_MAKER);
}
/**
......
......@@ -94,6 +94,10 @@ final class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleC
});
}
boolean isAppForeground() {
return !mIsBackground;
}
private void addActivityLifecycleCallbacksInner(final Activity activity,
final Utils.ActivityLifecycleCallbacks callbacks) {
List<Utils.ActivityLifecycleCallbacks> callbacksList = mActivityLifecycleCallbacksMap.get(activity);
......
......@@ -100,6 +100,10 @@ class UtilsBridge {
return UtilsActivityLifecycleImpl.INSTANCE.getApplicationByReflect();
}
static boolean isAppForeground() {
return UtilsActivityLifecycleImpl.INSTANCE.isAppForeground();
}
///////////////////////////////////////////////////////////////////////////
// ActivityUtils
///////////////////////////////////////////////////////////////////////////
......@@ -126,19 +130,6 @@ class UtilsBridge {
///////////////////////////////////////////////////////////////////////////
// AppUtils
///////////////////////////////////////////////////////////////////////////
static Context getTopActivityOrApp() {
if (AppUtils.isAppForeground()) {
Activity topActivity = getTopActivity();
return topActivity == null ? Utils.getApp() : topActivity;
} else {
return Utils.getApp();
}
}
static boolean isAppForeground() {
return AppUtils.isAppForeground();
}
static boolean isAppRunning(@NonNull final String pkgName) {
return AppUtils.isAppRunning(pkgName);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册