Commit c113ff65 authored by maxiaoliang's avatar maxiaoliang

修改广告,修改bug

parent 7e837e07
...@@ -123,5 +123,6 @@ dependencies { ...@@ -123,5 +123,6 @@ dependencies {
implementation 'com.applovin.mediation:facebook-adapter:+' implementation 'com.applovin.mediation:facebook-adapter:+'
implementation 'com.applovin.mediation:mintegral-adapter:+' implementation 'com.applovin.mediation:mintegral-adapter:+'
implementation 'com.applovin.mediation:bytedance-adapter:+' implementation 'com.applovin.mediation:bytedance-adapter:+'
implementation("com.blankj:utilcodex:1.31.1")
} }
\ No newline at end of file
package com.test.easy.easycleanerjunk package com.test.easy.easycleanerjunk
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.app.Application import android.app.Application
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import android.util.Log
import com.applovin.sdk.AppLovinMediationProvider import com.applovin.sdk.AppLovinMediationProvider
import com.applovin.sdk.AppLovinSdk import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkInitializationConfiguration import com.applovin.sdk.AppLovinSdkInitializationConfiguration
import com.google.android.gms.ads.MobileAds import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.test.easy.easycleanerjunk.activity.splash.NewSplashActivity import com.test.easy.easycleanerjunk.activity.splash.NewSplashActivity
import com.test.easy.easycleanerjunk.fcm.ActionBroadcast import com.test.easy.easycleanerjunk.fcm.ActionBroadcast
import com.test.easy.easycleanerjunk.fcm.FCMUtil import com.test.easy.easycleanerjunk.fcm.FCMUtil
...@@ -20,9 +19,8 @@ import com.test.easy.easycleanerjunk.helps.ConfigHelper ...@@ -20,9 +19,8 @@ import com.test.easy.easycleanerjunk.helps.ConfigHelper
import com.test.easy.easycleanerjunk.helps.InstallHelps import com.test.easy.easycleanerjunk.helps.InstallHelps
import com.test.easy.easycleanerjunk.helps.ads.AdmobUtils import com.test.easy.easycleanerjunk.helps.ads.AdmobUtils
import com.test.easy.easycleanerjunk.helps.ads.MaxAdUtils import com.test.easy.easycleanerjunk.helps.ads.MaxAdUtils
import com.test.easy.easycleanerjunk.utils.ActivityManagerUtils
import com.test.easy.easycleanerjunk.utils.SPUtils import com.test.easy.easycleanerjunk.utils.SPUtils
import java.util.Collections import com.test.easy.easycleanerjunk.utils.UtilsBridge
import java.util.UUID import java.util.UUID
import java.util.concurrent.Executors import java.util.concurrent.Executors
...@@ -59,12 +57,12 @@ class MyApplication : BaseApplication(), Application.ActivityLifecycleCallbacks ...@@ -59,12 +57,12 @@ class MyApplication : BaseApplication(), Application.ActivityLifecycleCallbacks
val initConfigBuilder = AppLovinSdkInitializationConfiguration.builder( val initConfigBuilder = AppLovinSdkInitializationConfiguration.builder(
"GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW", "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW",
context context
).setMediationProvider(AppLovinMediationProvider.ADMOB) ).setMediationProvider(AppLovinMediationProvider.MAX)
val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(context).id // val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(context).id
if (currentGaid != null) { // if (currentGaid != null) {
initConfigBuilder.testDeviceAdvertisingIds = // initConfigBuilder.testDeviceAdvertisingIds =
Collections.singletonList(currentGaid) // Collections.singletonList(currentGaid)
} // }
val initConfig = initConfigBuilder.build() val initConfig = initConfigBuilder.build()
// Initialize the SDK with the configuration // Initialize the SDK with the configuration
AppLovinSdk.getInstance(context).initialize(initConfig) { AppLovinSdk.getInstance(context).initialize(initConfig) {
...@@ -93,15 +91,17 @@ class MyApplication : BaseApplication(), Application.ActivityLifecycleCallbacks ...@@ -93,15 +91,17 @@ class MyApplication : BaseApplication(), Application.ActivityLifecycleCallbacks
} }
private var count = 0 private var count = 0
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {} override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
Log.e("MXL", "onActivityCreated: "+activity.localClassName )
}
override fun onActivityStarted(activity: Activity) { override fun onActivityStarted(activity: Activity) {
count++ count++
lastTimeResume = System.currentTimeMillis() lastTimeResume = System.currentTimeMillis()
if (count == 1 && isHotLaunch()) { if (count == 1 && isHotLaunch()) {
val topActivity: Activity? = ActivityManagerUtils.getInstance().topActivity //val topActivity: Activity? = ActivityManagerUtils.getInstance().topActivity
val topActivity= UtilsBridge.getTopActivity()
var flag = if (topActivity == null) { var flag = if (topActivity == null) {
true true
} else { } else {
......
...@@ -22,7 +22,6 @@ import com.test.easy.easycleanerjunk.utils.BarUtils ...@@ -22,7 +22,6 @@ import com.test.easy.easycleanerjunk.utils.BarUtils
@SuppressLint("CustomSplashScreen") @SuppressLint("CustomSplashScreen")
class NewSplashActivity : BaseActivity<ActivityLayoutSplashBinding>(), class NewSplashActivity : BaseActivity<ActivityLayoutSplashBinding>(),
PrivacyAgreementManager.onUserPrivacyAggreementListener, ProgressManager.ProgressListener { PrivacyAgreementManager.onUserPrivacyAggreementListener, ProgressManager.ProgressListener {
private val TAG = "NewSplashActivity"
private fun initStatusBar() { private fun initStatusBar() {
BarUtils.setStatusBarLightMode(this, true) BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT) BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
......
...@@ -3,7 +3,9 @@ package com.test.easy.easycleanerjunk.activity.splash ...@@ -3,7 +3,9 @@ package com.test.easy.easycleanerjunk.activity.splash
import android.os.Handler import android.os.Handler
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.test.easy.easycleanerjunk.databinding.ActivityLayoutSplashBinding import com.test.easy.easycleanerjunk.databinding.ActivityLayoutSplashBinding
import com.test.easy.easycleanerjunk.helps.EventUtils
import com.test.easy.easycleanerjunk.utils.SPUtils import com.test.easy.easycleanerjunk.utils.SPUtils
import org.json.JSONObject
class ProgressManager { class ProgressManager {
...@@ -42,11 +44,15 @@ class ProgressManager { ...@@ -42,11 +44,15 @@ class ProgressManager {
if (!mIsPaused) { if (!mIsPaused) {
mProgress++ // 计算进度 mProgress++ // 计算进度
binding.pb.progress = mProgress binding.pb.progress = mProgress
if (mProgress < 9) { if (mProgress < loadTime) {
mHandler.postDelayed(this, 1000) // 每秒钟更新一次进度 mHandler.postDelayed(this, 1000) // 每秒钟更新一次进度
} else { } else {
listener.onProgressMax() listener.onProgressMax()
pauseProgress() pauseProgress()
val obj = JSONObject()
obj.put("reason", "timeout")
obj.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj)
} }
} }
} }
......
...@@ -35,6 +35,7 @@ object ConfigHelper { ...@@ -35,6 +35,7 @@ object ConfigHelper {
val noLoadingActivities = listOf( val noLoadingActivities = listOf(
"full", // 过滤全屏广告 "full", // 过滤全屏广告
"adActivity", "adActivity",
"AdActivity",
"AppLovinFullscreenActivity", "AppLovinFullscreenActivity",
NewSplashActivity::class.java.simpleName NewSplashActivity::class.java.simpleName
// 返回前台时不跳转启动页的 activity // 返回前台时不跳转启动页的 activity
......
...@@ -84,7 +84,7 @@ object MaxAdUtils { ...@@ -84,7 +84,7 @@ object MaxAdUtils {
mOpenAd=null mOpenAd=null
onLoad?.invoke() onLoad?.invoke()
maxAdPullReport(null, "AppOpenAd", p1.message) maxAdPullReport(null, "AppOpenAd", p1.message)
Log.e("MXL", "onAdLoadFailed: " + p1) // Log.e("MXL", "onAdLoadFailed: " + p1)
AdDisplayUtils.getInstance().incrementAdRequestFailCount() AdDisplayUtils.getInstance().incrementAdRequestFailCount()
} }
...@@ -159,10 +159,10 @@ object MaxAdUtils { ...@@ -159,10 +159,10 @@ object MaxAdUtils {
} else { } else {
onHidden?.invoke() onHidden?.invoke()
mOpenAd?.loadAd() mOpenAd?.loadAd()
val obj = JSONObject() // val obj = JSONObject()
obj.put("reason", "no_ad") // obj.put("reason", "no_ad")
obj.put("ad_unit", "openAd") // obj.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj) // EventUtils.event("ad_show_error", ext = obj)
} }
} }
...@@ -223,6 +223,7 @@ object MaxAdUtils { ...@@ -223,6 +223,7 @@ object MaxAdUtils {
maxAdPullReport(null, "InterstitialAd", p1.message) maxAdPullReport(null, "InterstitialAd", p1.message)
onLoad?.invoke() onLoad?.invoke()
AdDisplayUtils.getInstance().incrementAdRequestFailCount() AdDisplayUtils.getInstance().incrementAdRequestFailCount()
Log.e("MXL", "onAdLoadFailed: "+p1.message )
// retryAttempt++ // retryAttempt++
// Handler(Looper.getMainLooper()).postDelayed({ // Handler(Looper.getMainLooper()).postDelayed({
// retryAttempt++ // retryAttempt++
......
package com.test.easy.easycleanerjunk.utils;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.app.Application;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import com.blankj.utilcode.util.Utils;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
public class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleCallbacks {
static final UtilsActivityLifecycleImpl INSTANCE = new UtilsActivityLifecycleImpl();
private final LinkedList<Activity> mActivityList = new LinkedList<>();
private final List<Utils.OnAppStatusChangedListener> mStatusListeners = new CopyOnWriteArrayList<>();
private final Map<Activity, List<Utils.ActivityLifecycleCallbacks>> mActivityLifecycleCallbacksMap = new ConcurrentHashMap<>();
private static final Activity STUB = new Activity();
private int mForegroundCount = 0;
private int mConfigCount = 0;
private boolean mIsBackground = false;
void init(Application app) {
app.registerActivityLifecycleCallbacks(this);
}
void unInit(Application app) {
mActivityList.clear();
app.unregisterActivityLifecycleCallbacks(this);
}
Activity getTopActivity() {
List<Activity> activityList = getActivityList();
for (Activity activity : activityList) {
if (!UtilsBridge.isActivityAlive(activity)) {
continue;
}
return activity;
}
return null;
}
List<Activity> getActivityList() {
if (!mActivityList.isEmpty()) {
return new LinkedList<>(mActivityList);
}
List<Activity> reflectActivities = getActivitiesByReflect();
mActivityList.addAll(reflectActivities);
return new LinkedList<>(mActivityList);
}
void addOnAppStatusChangedListener(final Utils.OnAppStatusChangedListener listener) {
mStatusListeners.add(listener);
}
void removeOnAppStatusChangedListener(final Utils.OnAppStatusChangedListener listener) {
mStatusListeners.remove(listener);
}
void addActivityLifecycleCallbacks(final Utils.ActivityLifecycleCallbacks listener) {
addActivityLifecycleCallbacks(STUB, listener);
}
void addActivityLifecycleCallbacks(final Activity activity,
final Utils.ActivityLifecycleCallbacks listener) {
if (activity == null || listener == null) return;
UtilsBridge.runOnUiThread(new Runnable() {
@Override
public void run() {
addActivityLifecycleCallbacksInner(activity, listener);
}
});
}
boolean isAppForeground() {
return !mIsBackground;
}
private void addActivityLifecycleCallbacksInner(final Activity activity,
final Utils.ActivityLifecycleCallbacks callbacks) {
List<Utils.ActivityLifecycleCallbacks> callbacksList = mActivityLifecycleCallbacksMap.get(activity);
if (callbacksList == null) {
callbacksList = new CopyOnWriteArrayList<>();
mActivityLifecycleCallbacksMap.put(activity, callbacksList);
} else {
if (callbacksList.contains(callbacks)) return;
}
callbacksList.add(callbacks);
}
void removeActivityLifecycleCallbacks(final Utils.ActivityLifecycleCallbacks callbacks) {
removeActivityLifecycleCallbacks(STUB, callbacks);
}
void removeActivityLifecycleCallbacks(final Activity activity) {
if (activity == null) return;
UtilsBridge.runOnUiThread(new Runnable() {
@Override
public void run() {
mActivityLifecycleCallbacksMap.remove(activity);
}
});
}
void removeActivityLifecycleCallbacks(final Activity activity,
final Utils.ActivityLifecycleCallbacks callbacks) {
if (activity == null || callbacks == null) return;
UtilsBridge.runOnUiThread(new Runnable() {
@Override
public void run() {
removeActivityLifecycleCallbacksInner(activity, callbacks);
}
});
}
private void removeActivityLifecycleCallbacksInner(final Activity activity,
final Utils.ActivityLifecycleCallbacks callbacks) {
List<Utils.ActivityLifecycleCallbacks> callbacksList = mActivityLifecycleCallbacksMap.get(activity);
if (callbacksList != null && !callbacksList.isEmpty()) {
callbacksList.remove(callbacks);
}
}
private void consumeActivityLifecycleCallbacks(Activity activity, Lifecycle.Event event) {
consumeLifecycle(activity, event, mActivityLifecycleCallbacksMap.get(activity));
consumeLifecycle(activity, event, mActivityLifecycleCallbacksMap.get(STUB));
}
private void consumeLifecycle(Activity activity, Lifecycle.Event event, List<Utils.ActivityLifecycleCallbacks> listeners) {
if (listeners == null) return;
for (Utils.ActivityLifecycleCallbacks listener : listeners) {
listener.onLifecycleChanged(activity, event);
if (event.equals(Lifecycle.Event.ON_CREATE)) {
listener.onActivityCreated(activity);
} else if (event.equals(Lifecycle.Event.ON_START)) {
listener.onActivityStarted(activity);
} else if (event.equals(Lifecycle.Event.ON_RESUME)) {
listener.onActivityResumed(activity);
} else if (event.equals(Lifecycle.Event.ON_PAUSE)) {
listener.onActivityPaused(activity);
} else if (event.equals(Lifecycle.Event.ON_STOP)) {
listener.onActivityStopped(activity);
} else if (event.equals(Lifecycle.Event.ON_DESTROY)) {
listener.onActivityDestroyed(activity);
}
}
if (event.equals(Lifecycle.Event.ON_DESTROY)) {
mActivityLifecycleCallbacksMap.remove(activity);
}
}
Application getApplicationByReflect() {
try {
Class activityThreadClass = Class.forName("android.app.ActivityThread");
Object thread = getActivityThread();
if (thread == null) return null;
Object app = activityThreadClass.getMethod("getApplication").invoke(thread);
if (app == null) return null;
return (Application) app;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
///////////////////////////////////////////////////////////////////////////
// lifecycle start
///////////////////////////////////////////////////////////////////////////
@Override
public void onActivityPreCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {/**/}
@Override
public void onActivityCreated(@NonNull Activity activity, Bundle savedInstanceState) {
if (mActivityList.size() == 0) {
postStatus(activity, true);
}
setAnimatorsEnabled();
setTopActivity(activity);
consumeActivityLifecycleCallbacks(activity, Lifecycle.Event.ON_CREATE);
}
@Override
public void onActivityPostCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {/**/}
@Override
public void onActivityPreStarted(@NonNull Activity activity) {/**/}
@Override
public void onActivityStarted(@NonNull Activity activity) {
if (!mIsBackground) {
setTopActivity(activity);
}
if (mConfigCount < 0) {
++mConfigCount;
} else {
++mForegroundCount;
}
consumeActivityLifecycleCallbacks(activity, Lifecycle.Event.ON_START);
}
@Override
public void onActivityPostStarted(@NonNull Activity activity) {/**/}
@Override
public void onActivityPreResumed(@NonNull Activity activity) {/**/}
@Override
public void onActivityResumed(@NonNull final Activity activity) {
setTopActivity(activity);
if (mIsBackground) {
mIsBackground = false;
postStatus(activity, true);
}
processHideSoftInputOnActivityDestroy(activity, false);
consumeActivityLifecycleCallbacks(activity, Lifecycle.Event.ON_RESUME);
}
@Override
public void onActivityPostResumed(@NonNull Activity activity) {/**/}
@Override
public void onActivityPrePaused(@NonNull Activity activity) {/**/}
@Override
public void onActivityPaused(@NonNull Activity activity) {
consumeActivityLifecycleCallbacks(activity, Lifecycle.Event.ON_PAUSE);
}
@Override
public void onActivityPostPaused(@NonNull Activity activity) {/**/}
@Override
public void onActivityPreStopped(@NonNull Activity activity) {/**/}
@Override
public void onActivityStopped(Activity activity) {
if (activity.isChangingConfigurations()) {
--mConfigCount;
} else {
--mForegroundCount;
if (mForegroundCount <= 0) {
mIsBackground = true;
postStatus(activity, false);
}
}
processHideSoftInputOnActivityDestroy(activity, true);
consumeActivityLifecycleCallbacks(activity, Lifecycle.Event.ON_STOP);
}
@Override
public void onActivityPostStopped(@NonNull Activity activity) {/**/}
@Override
public void onActivityPreSaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {/**/}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {/**/}
@Override
public void onActivityPostSaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {/**/}
@Override
public void onActivityPreDestroyed(@NonNull Activity activity) {/**/}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
mActivityList.remove(activity);
UtilsBridge.fixSoftInputLeaks(activity);
consumeActivityLifecycleCallbacks(activity, Lifecycle.Event.ON_DESTROY);
}
@Override
public void onActivityPostDestroyed(@NonNull Activity activity) {/**/}
///////////////////////////////////////////////////////////////////////////
// lifecycle end
///////////////////////////////////////////////////////////////////////////
/**
* To solve close keyboard when activity onDestroy.
* The preActivity set windowSoftInputMode will prevent
* the keyboard from closing when curActivity onDestroy.
*/
private void processHideSoftInputOnActivityDestroy(final Activity activity, boolean isSave) {
try {
if (isSave) {
Window window = activity.getWindow();
final WindowManager.LayoutParams attrs = window.getAttributes();
final int softInputMode = attrs.softInputMode;
window.getDecorView().setTag(-123, softInputMode);
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
} else {
final Object tag = activity.getWindow().getDecorView().getTag(-123);
if (!(tag instanceof Integer)) return;
UtilsBridge.runOnUiThreadDelayed(new Runnable() {
@Override
public void run() {
try {
Window window = activity.getWindow();
if (window != null) {
window.setSoftInputMode(((Integer) tag));
}
} catch (Exception ignore) {
}
}
}, 100);
}
} catch (Exception ignore) {
}
}
private void postStatus(final Activity activity, final boolean isForeground) {
if (mStatusListeners.isEmpty()) return;
for (Utils.OnAppStatusChangedListener statusListener : mStatusListeners) {
if (isForeground) {
statusListener.onForeground(activity);
} else {
statusListener.onBackground(activity);
}
}
}
private void setTopActivity(final Activity activity) {
if (mActivityList.contains(activity)) {
if (!mActivityList.getFirst().equals(activity)) {
mActivityList.remove(activity);
mActivityList.addFirst(activity);
}
} else {
mActivityList.addFirst(activity);
}
}
/**
* @return the activities which topActivity is first position
*/
private List<Activity> getActivitiesByReflect() {
LinkedList<Activity> list = new LinkedList<>();
Activity topActivity = null;
try {
Object activityThread = getActivityThread();
if (activityThread == null) return list;
Field mActivitiesField = activityThread.getClass().getDeclaredField("mActivities");
mActivitiesField.setAccessible(true);
Object mActivities = mActivitiesField.get(activityThread);
if (!(mActivities instanceof Map)) {
return list;
}
Map<Object, Object> binder_activityClientRecord_map = (Map<Object, Object>) mActivities;
for (Object activityRecord : binder_activityClientRecord_map.values()) {
Class activityClientRecordClass = activityRecord.getClass();
Field activityField = activityClientRecordClass.getDeclaredField("activity");
activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(activityRecord);
if (topActivity == null) {
Field pausedField = activityClientRecordClass.getDeclaredField("paused");
pausedField.setAccessible(true);
if (!pausedField.getBoolean(activityRecord)) {
topActivity = activity;
} else {
list.addFirst(activity);
}
} else {
list.addFirst(activity);
}
}
} catch (Exception e) {
Log.e("UtilsActivityLifecycle", "getActivitiesByReflect: " + e.getMessage());
}
if (topActivity != null) {
list.addFirst(topActivity);
}
return list;
}
private Object getActivityThread() {
Object activityThread = getActivityThreadInActivityThreadStaticField();
if (activityThread != null) return activityThread;
return getActivityThreadInActivityThreadStaticMethod();
}
private Object getActivityThreadInActivityThreadStaticField() {
try {
Class activityThreadClass = Class.forName("android.app.ActivityThread");
Field sCurrentActivityThreadField = activityThreadClass.getDeclaredField("sCurrentActivityThread");
sCurrentActivityThreadField.setAccessible(true);
return sCurrentActivityThreadField.get(null);
} catch (Exception e) {
Log.e("UtilsActivityLifecycle", "getActivityThreadInActivityThreadStaticField: " + e.getMessage());
return null;
}
}
private Object getActivityThreadInActivityThreadStaticMethod() {
try {
Class activityThreadClass = Class.forName("android.app.ActivityThread");
return activityThreadClass.getMethod("currentActivityThread").invoke(null);
} catch (Exception e) {
Log.e("UtilsActivityLifecycle", "getActivityThreadInActivityThreadStaticMethod: " + e.getMessage());
return null;
}
}
/**
* Set animators enabled.
*/
private static void setAnimatorsEnabled() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && ValueAnimator.areAnimatorsEnabled()) {
return;
}
try {
//noinspection JavaReflectionMemberAccess
Field sDurationScaleField = ValueAnimator.class.getDeclaredField("sDurationScale");
sDurationScaleField.setAccessible(true);
//noinspection ConstantConditions
float sDurationScale = (Float) sDurationScaleField.get(null);
if (sDurationScale == 0f) {
sDurationScaleField.set(null, 1f);
Log.i("UtilsActivityLifecycle", "setAnimatorsEnabled: Animators are enabled now!");
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
package com.test.easy.easycleanerjunk.utils;
import static android.Manifest.permission.CALL_PHONE;
import android.app.Activity;
import android.app.Application;
import android.app.Notification;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Parcelable;
import android.text.TextUtils;
import android.view.View;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RequiresPermission;
import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.BarUtils;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.DebouncingUtils;
import com.blankj.utilcode.util.EncodeUtils;
import com.blankj.utilcode.util.FileIOUtils;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.ImageUtils;
import com.blankj.utilcode.util.IntentUtils;
import com.blankj.utilcode.util.JsonUtils;
import com.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.NotificationUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.ProcessUtils;
import com.blankj.utilcode.util.RomUtils;
import com.blankj.utilcode.util.SDCardUtils;
import com.blankj.utilcode.util.SPUtils;
import com.blankj.utilcode.util.ScreenUtils;
import com.blankj.utilcode.util.ServiceUtils;
import com.blankj.utilcode.util.ShellUtils;
import com.blankj.utilcode.util.SizeUtils;
import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.ThreadUtils;
import com.blankj.utilcode.util.ThrowableUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.UriUtils;
import com.blankj.utilcode.util.Utils;
import com.blankj.utilcode.util.ViewUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* <pre>
* author: blankj
* blog : http://blankj.com
* time : 2020/03/19
* desc :
* </pre>
*/
public class UtilsBridge {
static void init(Application app) {
UtilsActivityLifecycleImpl.INSTANCE.init(app);
}
static void unInit(Application app) {
UtilsActivityLifecycleImpl.INSTANCE.unInit(app);
}
static void preLoad() {
// preLoad(AdaptScreenUtils.getPreLoadRunnable());
}
///////////////////////////////////////////////////////////////////////////
// UtilsActivityLifecycleImpl
///////////////////////////////////////////////////////////////////////////
public static Activity getTopActivity() {
return UtilsActivityLifecycleImpl.INSTANCE.getTopActivity();
}
static void addOnAppStatusChangedListener(final Utils.OnAppStatusChangedListener listener) {
UtilsActivityLifecycleImpl.INSTANCE.addOnAppStatusChangedListener(listener);
}
static void removeOnAppStatusChangedListener(final Utils.OnAppStatusChangedListener listener) {
UtilsActivityLifecycleImpl.INSTANCE.removeOnAppStatusChangedListener(listener);
}
static void addActivityLifecycleCallbacks(final Utils.ActivityLifecycleCallbacks callbacks) {
UtilsActivityLifecycleImpl.INSTANCE.addActivityLifecycleCallbacks(callbacks);
}
static void removeActivityLifecycleCallbacks(final Utils.ActivityLifecycleCallbacks callbacks) {
UtilsActivityLifecycleImpl.INSTANCE.removeActivityLifecycleCallbacks(callbacks);
}
static void addActivityLifecycleCallbacks(final Activity activity,
final Utils.ActivityLifecycleCallbacks callbacks) {
UtilsActivityLifecycleImpl.INSTANCE.addActivityLifecycleCallbacks(activity, callbacks);
}
static void removeActivityLifecycleCallbacks(final Activity activity) {
UtilsActivityLifecycleImpl.INSTANCE.removeActivityLifecycleCallbacks(activity);
}
static void removeActivityLifecycleCallbacks(final Activity activity,
final Utils.ActivityLifecycleCallbacks callbacks) {
UtilsActivityLifecycleImpl.INSTANCE.removeActivityLifecycleCallbacks(activity, callbacks);
}
static List<Activity> getActivityList() {
return UtilsActivityLifecycleImpl.INSTANCE.getActivityList();
}
static Application getApplicationByReflect() {
return UtilsActivityLifecycleImpl.INSTANCE.getApplicationByReflect();
}
static boolean isAppForeground() {
return UtilsActivityLifecycleImpl.INSTANCE.isAppForeground();
}
///////////////////////////////////////////////////////////////////////////
// ActivityUtils
///////////////////////////////////////////////////////////////////////////
static boolean isActivityAlive(final Activity activity) {
return ActivityUtils.isActivityAlive(activity);
}
static String getLauncherActivity(final String pkg) {
return ActivityUtils.getLauncherActivity(pkg);
}
static Activity getActivityByContext(Context context) {
return ActivityUtils.getActivityByContext(context);
}
static void startHomeActivity() {
ActivityUtils.startHomeActivity();
}
static void finishAllActivities() {
ActivityUtils.finishAllActivities();
}
///////////////////////////////////////////////////////////////////////////
// AppUtils
///////////////////////////////////////////////////////////////////////////
static boolean isAppRunning(@NonNull final String pkgName) {
return AppUtils.isAppRunning(pkgName);
}
static boolean isAppInstalled(final String pkgName) {
return AppUtils.isAppInstalled(pkgName);
}
static boolean isAppDebug() {
return AppUtils.isAppDebug();
}
static void relaunchApp() {
AppUtils.relaunchApp();
}
///////////////////////////////////////////////////////////////////////////
// BarUtils
///////////////////////////////////////////////////////////////////////////
static int getStatusBarHeight() {
return com.blankj.utilcode.util.BarUtils.getStatusBarHeight();
}
static int getNavBarHeight() {
return BarUtils.getNavBarHeight();
}
///////////////////////////////////////////////////////////////////////////
// ConvertUtils
///////////////////////////////////////////////////////////////////////////
static String bytes2HexString(final byte[] bytes) {
return ConvertUtils.bytes2HexString(bytes);
}
static byte[] hexString2Bytes(String hexString) {
return ConvertUtils.hexString2Bytes(hexString);
}
static byte[] string2Bytes(final String string) {
return ConvertUtils.string2Bytes(string);
}
static String bytes2String(final byte[] bytes) {
return ConvertUtils.bytes2String(bytes);
}
static byte[] jsonObject2Bytes(final JSONObject jsonObject) {
return ConvertUtils.jsonObject2Bytes(jsonObject);
}
static JSONObject bytes2JSONObject(final byte[] bytes) {
return ConvertUtils.bytes2JSONObject(bytes);
}
static byte[] jsonArray2Bytes(final JSONArray jsonArray) {
return ConvertUtils.jsonArray2Bytes(jsonArray);
}
static JSONArray bytes2JSONArray(final byte[] bytes) {
return ConvertUtils.bytes2JSONArray(bytes);
}
static byte[] parcelable2Bytes(final Parcelable parcelable) {
return ConvertUtils.parcelable2Bytes(parcelable);
}
static <T> T bytes2Parcelable(final byte[] bytes,
final Parcelable.Creator<T> creator) {
return ConvertUtils.bytes2Parcelable(bytes, creator);
}
static byte[] serializable2Bytes(final Serializable serializable) {
return ConvertUtils.serializable2Bytes(serializable);
}
static Object bytes2Object(final byte[] bytes) {
return ConvertUtils.bytes2Object(bytes);
}
static String byte2FitMemorySize(final long byteSize) {
return ConvertUtils.byte2FitMemorySize(byteSize);
}
static byte[] inputStream2Bytes(final InputStream is) {
return ConvertUtils.inputStream2Bytes(is);
}
static ByteArrayOutputStream input2OutputStream(final InputStream is) {
return ConvertUtils.input2OutputStream(is);
}
static List<String> inputStream2Lines(final InputStream is, final String charsetName) {
return ConvertUtils.inputStream2Lines(is, charsetName);
}
///////////////////////////////////////////////////////////////////////////
// DebouncingUtils
///////////////////////////////////////////////////////////////////////////
static boolean isValid(@NonNull final View view, final long duration) {
return DebouncingUtils.isValid(view, duration);
}
///////////////////////////////////////////////////////////////////////////
// EncodeUtils
///////////////////////////////////////////////////////////////////////////
static byte[] base64Encode(final byte[] input) {
return EncodeUtils.base64Encode(input);
}
static byte[] base64Decode(final byte[] input) {
return EncodeUtils.base64Decode(input);
}
///////////////////////////////////////////////////////////////////////////
// EncryptUtils
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// FileIOUtils
///////////////////////////////////////////////////////////////////////////
static boolean writeFileFromBytes(final File file,
final byte[] bytes) {
return FileIOUtils.writeFileFromBytesByChannel(file, bytes, true);
}
static byte[] readFile2Bytes(final File file) {
return FileIOUtils.readFile2BytesByChannel(file);
}
static boolean writeFileFromString(final String filePath, final String content, final boolean append) {
return FileIOUtils.writeFileFromString(filePath, content, append);
}
static boolean writeFileFromIS(final String filePath, final InputStream is) {
return FileIOUtils.writeFileFromIS(filePath, is);
}
///////////////////////////////////////////////////////////////////////////
// FileUtils
///////////////////////////////////////////////////////////////////////////
static boolean isFileExists(final File file) {
return FileUtils.isFileExists(file);
}
static File getFileByPath(final String filePath) {
return FileUtils.getFileByPath(filePath);
}
static boolean deleteAllInDir(final File dir) {
return FileUtils.deleteAllInDir(dir);
}
static boolean createOrExistsFile(final File file) {
return FileUtils.createOrExistsFile(file);
}
static boolean createOrExistsDir(final File file) {
return FileUtils.createOrExistsDir(file);
}
static boolean createFileByDeleteOldFile(final File file) {
return FileUtils.createFileByDeleteOldFile(file);
}
static long getFsTotalSize(String path) {
return FileUtils.getFsTotalSize(path);
}
static long getFsAvailableSize(String path) {
return FileUtils.getFsAvailableSize(path);
}
static void notifySystemToScan(File file) {
FileUtils.notifySystemToScan(file);
}
///////////////////////////////////////////////////////////////////////////
// GsonUtils
///////////////////////////////////////////////////////////////////////////
static String toJson(final Object object) {
return com.blankj.utilcode.util.GsonUtils.toJson(object);
}
static <T> T fromJson(final String json, final Type type) {
return com.blankj.utilcode.util.GsonUtils.fromJson(json, type);
}
///////////////////////////////////////////////////////////////////////////
// ImageUtils
///////////////////////////////////////////////////////////////////////////
static byte[] bitmap2Bytes(final Bitmap bitmap) {
return ImageUtils.bitmap2Bytes(bitmap);
}
static byte[] bitmap2Bytes(final Bitmap bitmap, final Bitmap.CompressFormat format, int quality) {
return ImageUtils.bitmap2Bytes(bitmap, format, quality);
}
static Bitmap bytes2Bitmap(final byte[] bytes) {
return ImageUtils.bytes2Bitmap(bytes);
}
static byte[] drawable2Bytes(final Drawable drawable) {
return ImageUtils.drawable2Bytes(drawable);
}
static byte[] drawable2Bytes(final Drawable drawable, final Bitmap.CompressFormat format, int quality) {
return ImageUtils.drawable2Bytes(drawable, format, quality);
}
static Drawable bytes2Drawable(final byte[] bytes) {
return ImageUtils.bytes2Drawable(bytes);
}
static Bitmap view2Bitmap(final View view) {
return ImageUtils.view2Bitmap(view);
}
static Bitmap drawable2Bitmap(final Drawable drawable) {
return ImageUtils.drawable2Bitmap(drawable);
}
static Drawable bitmap2Drawable(final Bitmap bitmap) {
return ImageUtils.bitmap2Drawable(bitmap);
}
///////////////////////////////////////////////////////////////////////////
// IntentUtils
///////////////////////////////////////////////////////////////////////////
static boolean isIntentAvailable(final Intent intent) {
return IntentUtils.isIntentAvailable(intent);
}
static Intent getLaunchAppIntent(final String pkgName) {
return IntentUtils.getLaunchAppIntent(pkgName);
}
static Intent getInstallAppIntent(final File file) {
return IntentUtils.getInstallAppIntent(file);
}
static Intent getInstallAppIntent(final Uri uri) {
return IntentUtils.getInstallAppIntent(uri);
}
static Intent getUninstallAppIntent(final String pkgName) {
return IntentUtils.getUninstallAppIntent(pkgName);
}
static Intent getDialIntent(final String phoneNumber) {
return IntentUtils.getDialIntent(phoneNumber);
}
@RequiresPermission(CALL_PHONE)
static Intent getCallIntent(final String phoneNumber) {
return IntentUtils.getCallIntent(phoneNumber);
}
static Intent getSendSmsIntent(final String phoneNumber, final String content) {
return IntentUtils.getSendSmsIntent(phoneNumber, content);
}
static Intent getLaunchAppDetailsSettingsIntent(final String pkgName, final boolean isNewTask) {
return IntentUtils.getLaunchAppDetailsSettingsIntent(pkgName, isNewTask);
}
///////////////////////////////////////////////////////////////////////////
// JsonUtils
///////////////////////////////////////////////////////////////////////////
static String formatJson(String json) {
return JsonUtils.formatJson(json);
}
///////////////////////////////////////////////////////////////////////////
// KeyboardUtils
///////////////////////////////////////////////////////////////////////////
static void fixSoftInputLeaks(final Activity activity) {
KeyboardUtils.fixSoftInputLeaks(activity);
}
///////////////////////////////////////////////////////////////////////////
// NotificationUtils
///////////////////////////////////////////////////////////////////////////
static Notification getNotification(NotificationUtils.ChannelConfig channelConfig,
Utils.Consumer<NotificationCompat.Builder> consumer) {
return NotificationUtils.getNotification(channelConfig, consumer);
}
///////////////////////////////////////////////////////////////////////////
// PermissionUtils
///////////////////////////////////////////////////////////////////////////
static boolean isGranted(final String... permissions) {
return com.blankj.utilcode.util.PermissionUtils.isGranted(permissions);
}
@RequiresApi(api = Build.VERSION_CODES.M)
static boolean isGrantedDrawOverlays() {
return PermissionUtils.isGrantedDrawOverlays();
}
///////////////////////////////////////////////////////////////////////////
// ProcessUtils
///////////////////////////////////////////////////////////////////////////
static boolean isMainProcess() {
return ProcessUtils.isMainProcess();
}
static String getForegroundProcessName() {
return ProcessUtils.getForegroundProcessName();
}
static String getCurrentProcessName() {
return ProcessUtils.getCurrentProcessName();
}
///////////////////////////////////////////////////////////////////////////
// RomUtils
///////////////////////////////////////////////////////////////////////////
static boolean isSamsung() {
return RomUtils.isSamsung();
}
///////////////////////////////////////////////////////////////////////////
// ScreenUtils
///////////////////////////////////////////////////////////////////////////
static int getAppScreenWidth() {
return ScreenUtils.getAppScreenWidth();
}
///////////////////////////////////////////////////////////////////////////
// SDCardUtils
///////////////////////////////////////////////////////////////////////////
static boolean isSDCardEnableByEnvironment() {
return SDCardUtils.isSDCardEnableByEnvironment();
}
///////////////////////////////////////////////////////////////////////////
// ServiceUtils
///////////////////////////////////////////////////////////////////////////
static boolean isServiceRunning(final String className) {
return ServiceUtils.isServiceRunning(className);
}
///////////////////////////////////////////////////////////////////////////
// ShellUtils
///////////////////////////////////////////////////////////////////////////
static ShellUtils.CommandResult execCmd(final String command, final boolean isRooted) {
return ShellUtils.execCmd(command, isRooted);
}
///////////////////////////////////////////////////////////////////////////
// SizeUtils
///////////////////////////////////////////////////////////////////////////
static int dp2px(final float dpValue) {
return SizeUtils.dp2px(dpValue);
}
static int px2dp(final float pxValue) {
return SizeUtils.px2dp(pxValue);
}
static int sp2px(final float spValue) {
return SizeUtils.sp2px(spValue);
}
static int px2sp(final float pxValue) {
return SizeUtils.px2sp(pxValue);
}
///////////////////////////////////////////////////////////////////////////
// SpUtils
///////////////////////////////////////////////////////////////////////////
static com.blankj.utilcode.util.SPUtils getSpUtils4Utils() {
return SPUtils.getInstance("Utils");
}
///////////////////////////////////////////////////////////////////////////
// StringUtils
///////////////////////////////////////////////////////////////////////////
static boolean isSpace(final String s) {
return StringUtils.isSpace(s);
}
static boolean equals(final CharSequence s1, final CharSequence s2) {
return StringUtils.equals(s1, s2);
}
static String getString(@StringRes int id) {
return StringUtils.getString(id);
}
static String getString(@StringRes int id, Object... formatArgs) {
return StringUtils.getString(id, formatArgs);
}
static String format(@Nullable String str, Object... args) {
return StringUtils.format(str, args);
}
///////////////////////////////////////////////////////////////////////////
// ThreadUtils
///////////////////////////////////////////////////////////////////////////
static <T> Utils.Task<T> doAsync(final Utils.Task<T> task) {
ThreadUtils.getCachedPool().execute(task);
return task;
}
static void runOnUiThread(final Runnable runnable) {
ThreadUtils.runOnUiThread(runnable);
}
static void runOnUiThreadDelayed(final Runnable runnable, long delayMillis) {
ThreadUtils.runOnUiThreadDelayed(runnable, delayMillis);
}
///////////////////////////////////////////////////////////////////////////
// ThrowableUtils
///////////////////////////////////////////////////////////////////////////
static String getFullStackTrace(Throwable throwable) {
return ThrowableUtils.getFullStackTrace(throwable);
}
///////////////////////////////////////////////////////////////////////////
// ToastUtils
///////////////////////////////////////////////////////////////////////////
static void toastShowShort(final CharSequence text) {
ToastUtils.showShort(text);
}
static void toastCancel() {
ToastUtils.cancel();
}
private static void preLoad(final Runnable... runs) {
for (final Runnable r : runs) {
ThreadUtils.getCachedPool().execute(r);
}
}
///////////////////////////////////////////////////////////////////////////
// UriUtils
///////////////////////////////////////////////////////////////////////////
static Uri file2Uri(final File file) {
return UriUtils.file2Uri(file);
}
static File uri2File(final Uri uri) {
return UriUtils.uri2File(uri);
}
///////////////////////////////////////////////////////////////////////////
// ViewUtils
///////////////////////////////////////////////////////////////////////////
static View layoutId2View(@LayoutRes final int layoutId) {
return ViewUtils.layoutId2View(layoutId);
}
static boolean isLayoutRtl() {
return ViewUtils.isLayoutRtl();
}
///////////////////////////////////////////////////////////////////////////
// Common
///////////////////////////////////////////////////////////////////////////
static final class FileHead {
private String mName;
private LinkedHashMap<String, String> mFirst = new LinkedHashMap<>();
private LinkedHashMap<String, String> mLast = new LinkedHashMap<>();
FileHead(String name) {
mName = name;
}
void addFirst(String key, String value) {
append2Host(mFirst, key, value);
}
void append(Map<String, String> extra) {
append2Host(mLast, extra);
}
void append(String key, String value) {
append2Host(mLast, key, value);
}
private void append2Host(Map<String, String> host, Map<String, String> extra) {
if (extra == null || extra.isEmpty()) {
return;
}
for (Map.Entry<String, String> entry : extra.entrySet()) {
append2Host(host, entry.getKey(), entry.getValue());
}
}
private void append2Host(Map<String, String> host, String key, String value) {
if (TextUtils.isEmpty(key) || TextUtils.isEmpty(value)) {
return;
}
int delta = 19 - key.length(); // 19 is length of "Device Manufacturer"
if (delta > 0) {
key = key + " ".substring(0, delta);
}
host.put(key, value);
}
public String getAppended() {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : mLast.entrySet()) {
sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
}
return sb.toString();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
String border = "************* " + mName + " Head ****************\n";
sb.append(border);
for (Map.Entry<String, String> entry : mFirst.entrySet()) {
sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
}
sb.append("Rom Info : ").append(RomUtils.getRomInfo()).append("\n");
sb.append("Device Manufacturer: ").append(Build.MANUFACTURER).append("\n");
sb.append("Device Model : ").append(Build.MODEL).append("\n");
sb.append("Android Version : ").append(Build.VERSION.RELEASE).append("\n");
sb.append("Android SDK : ").append(Build.VERSION.SDK_INT).append("\n");
sb.append("App VersionName : ").append(AppUtils.getAppVersionName()).append("\n");
sb.append("App VersionCode : ").append(AppUtils.getAppVersionCode()).append("\n");
sb.append(getAppended());
return sb.append(border).append("\n").toString();
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment