提交 af0d82da 编写于 作者: J jackjintai

modify:

1、新增系统模式下页面倒计时浮标
上级 48e453cf
......@@ -10,7 +10,7 @@ import android.widget.TextView;
import com.didichuxing.doraemondemo.R;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* ================================================
......@@ -38,7 +38,7 @@ public class DemoDokitView extends AbsDokitView {
tvClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DokitViewManager.getInstance().detach(DemoDokitView.this);
DokitViewManagerProxy.getInstance().detach(DemoDokitView.this);
}
});
}
......
......@@ -6,7 +6,7 @@ import com.didichuxing.doraemondemo.R;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* ================================================
......@@ -37,7 +37,7 @@ public class DemoKit extends AbstractKit {
public void onClick(Context context) {
DokitIntent dokitIntent = new DokitIntent(DemoDokitView.class);
dokitIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(dokitIntent);
DokitViewManagerProxy.getInstance().attach(dokitIntent);
}
@Override
......
......@@ -5,7 +5,7 @@ import android.content.Context;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.weex.R;
/**
......@@ -33,7 +33,7 @@ public class WeexLogKit extends AbstractKit {
public void onClick(Context context) {
DokitIntent intent = new DokitIntent(WeexLogInfoDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
}
@Override
......
package com.didichuxing.doraemonkit;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.widget.Toast;
import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.model.ActivityLifecycleInfo;
import com.didichuxing.doraemonkit.ui.UniversalActivity;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.main.FloatIconDokitView;
import com.didichuxing.doraemonkit.util.LifecycleListenerUtil;
import com.didichuxing.doraemonkit.util.PermissionUtil;
import com.didichuxing.doraemonkit.util.UIUtils;
import java.util.Map;
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2019-12-31-10:04
* 描 述:全局的activity生命周期回调
* 修订历史:
* ================================================
*/
class DokitActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
private int startedActivityCounts;
private boolean sHasRequestPermission;
/**
* fragment 生命周期回调
*/
private FragmentManager.FragmentLifecycleCallbacks sFragmentLifecycleCallbacks;
DokitActivityLifecycleCallbacks() {
sFragmentLifecycleCallbacks = new DokitFragmentLifecycleCallbacks();
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
recordActivityLifeCycleStatus(activity, LIFE_CYCLE_STATUS_CREATE);
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
if (activity instanceof FragmentActivity) {
//注册fragment生命周期回调
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(sFragmentLifecycleCallbacks, true);
}
}
@Override
public void onActivityStarted(Activity activity) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
if (startedActivityCounts == 0) {
DokitViewManagerProxy.getInstance().notifyForeground();
}
startedActivityCounts++;
}
@Override
public void onActivityResumed(Activity activity) {
recordActivityLifeCycleStatus(activity, LIFE_CYCLE_STATUS_RESUME);
//如果是leakCanary页面不进行添加
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
//设置app的直接子view的Id
if (UIUtils.getDokitAppContentView(activity) != null) {
UIUtils.getDokitAppContentView(activity).setId(R.id.dokit_app_contentview_id);
}
//添加DokitView
resumeAndAttachDokitViews(activity);
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onActivityResumed(activity);
}
}
@Override
public void onActivityPaused(Activity activity) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onActivityPaused(activity);
}
}
@Override
public void onActivityStopped(Activity activity) {
recordActivityLifeCycleStatus(activity, LIFE_CYCLE_STATUS_STOPPED);
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
startedActivityCounts--;
//通知app退出到后台
if (startedActivityCounts == 0) {
DokitViewManagerProxy.getInstance().notifyBackground();
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
}
@Override
public void onActivityDestroyed(Activity activity) {
recordActivityLifeCycleStatus(activity, LIFE_CYCLE_STATUS_DESTROY);
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
//注销fragment的生命周期回调
if (activity instanceof FragmentActivity) {
((FragmentActivity) activity).getSupportFragmentManager().unregisterFragmentLifecycleCallbacks(sFragmentLifecycleCallbacks);
}
DokitViewManagerProxy.getInstance().onActivityDestroy(activity);
}
/**
* 是否忽略在当前的activity上显示浮标
*
* @param activity
* @return
*/
private static boolean ignoreCurrentActivityDokitView(Activity activity) {
String[] ignoreActivityClassNames = new String[]{"DisplayLeakActivity"};
for (String activityClassName : ignoreActivityClassNames) {
if (activity.getClass().getSimpleName().equals(activityClassName)) {
return true;
}
}
return false;
}
/**
* 显示所有应该显示的dokitView
*
* @param activity
*/
private void resumeAndAttachDokitViews(Activity activity) {
if (DokitConstant.IS_NORMAL_FLOAT_MODE) {
//显示内置dokitView icon
DokitViewManagerProxy.getInstance().resumeAndAttachDokitViews(activity);
}
//系统模式
else {
//悬浮窗权限 vivo 华为可以不需要动态权限 小米需要
if (PermissionUtil.canDrawOverlays(activity)) {
DokitViewManagerProxy.getInstance().resumeAndAttachDokitViews(activity);
} else {
//请求悬浮窗权限
requestPermission(activity);
}
}
}
/**
* 显示系统悬浮窗icon
*/
private void showSystemMainIcon() {
if (ActivityUtils.getTopActivity() instanceof UniversalActivity) {
return;
}
if (!DokitConstant.AWAYS_SHOW_MAIN_ICON) {
return;
}
DokitIntent intent = new DokitIntent(FloatIconDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManagerProxy.getInstance().attach(intent);
DokitConstant.MAIN_ICON_HAS_SHOW = true;
}
/**
* 生命周期回调
*
* @param activity
*/
private void systemDokitViewOnResume(Activity activity) {
Map<String, AbsDokitView> dokitViewMap = DokitViewManagerProxy.getInstance().getDokitViews(activity);
for (AbsDokitView absDokitView : dokitViewMap.values()) {
absDokitView.onResume();
}
}
/**
* 请求悬浮窗权限
*
* @param context
*/
private void requestPermission(Context context) {
if (!PermissionUtil.canDrawOverlays(context) && !sHasRequestPermission) {
Toast.makeText(context, context.getText(R.string.dk_float_permission_toast), Toast.LENGTH_SHORT).show();
//请求悬浮窗权限
PermissionUtil.requestDrawOverlays(context);
sHasRequestPermission = true;
}
}
/**
* Activity 创建
*/
private static int LIFE_CYCLE_STATUS_CREATE = 100;
/**
* Activity resume
*/
private static int LIFE_CYCLE_STATUS_RESUME = 101;
/**
* Activity stop
*/
private static int LIFE_CYCLE_STATUS_STOPPED = 102;
/**
* Activity destroy
*/
private static int LIFE_CYCLE_STATUS_DESTROY = 103;
/**
* 记录当前Activity的生命周期状态
*/
private void recordActivityLifeCycleStatus(Activity activity, int lifeCycleStatus) {
ActivityLifecycleInfo activityLifecaycleInfo = DokitConstant.ACTIVITY_LIFECYCLE_INFOS.get(activity.getClass().getCanonicalName());
if (activityLifecaycleInfo == null) {
activityLifecaycleInfo = new ActivityLifecycleInfo();
activityLifecaycleInfo.setActivityName(activity.getClass().getCanonicalName());
if (lifeCycleStatus == LIFE_CYCLE_STATUS_CREATE) {
activityLifecaycleInfo.setActivityLifeCycleCount(0);
} else if (lifeCycleStatus == LIFE_CYCLE_STATUS_RESUME) {
activityLifecaycleInfo.setActivityLifeCycleCount(activityLifecaycleInfo.getActivityLifeCycleCount() + 1);
} else if (lifeCycleStatus == LIFE_CYCLE_STATUS_STOPPED) {
activityLifecaycleInfo.setInvokeStopMethod(true);
}
DokitConstant.ACTIVITY_LIFECYCLE_INFOS.put(activity.getClass().getCanonicalName(), activityLifecaycleInfo);
} else {
activityLifecaycleInfo.setActivityName(activity.getClass().getCanonicalName());
if (lifeCycleStatus == LIFE_CYCLE_STATUS_CREATE) {
activityLifecaycleInfo.setActivityLifeCycleCount(0);
} else if (lifeCycleStatus == LIFE_CYCLE_STATUS_RESUME) {
activityLifecaycleInfo.setActivityLifeCycleCount(activityLifecaycleInfo.getActivityLifeCycleCount() + 1);
} else if (lifeCycleStatus == LIFE_CYCLE_STATUS_STOPPED) {
activityLifecaycleInfo.setInvokeStopMethod(true);
} else if (lifeCycleStatus == LIFE_CYCLE_STATUS_DESTROY) {
DokitConstant.ACTIVITY_LIFECYCLE_INFOS.remove(activity.getClass().getCanonicalName());
}
}
}
}
package com.didichuxing.doraemonkit;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.kit.dbdebug.DbDebugFragment;
import com.didichuxing.doraemonkit.util.LifecycleListenerUtil;
import com.didichuxing.doraemonkit.util.LogHelper;
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2019-12-31-10:56
* 描 述:全局的fragment 生命周期回调
* 修订历史:
* ================================================
*/
public class DokitFragmentLifecycleCallbacks extends FragmentManager.FragmentLifecycleCallbacks {
private static final String TAG = "DokitFragmentLifecycleCallbacks";
@Override
public void onFragmentAttached(FragmentManager fm, Fragment fragment, Context context) {
super.onFragmentAttached(fm, fragment, context);
LogHelper.d(TAG, "onFragmentAttached: " + fragment);
if (fragment instanceof DbDebugFragment) {
DokitConstant.DB_DEBUG_FRAGMENT = (DbDebugFragment) fragment;
}
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onFragmentAttached(fragment);
}
}
@Override
public void onFragmentDetached(FragmentManager fm, Fragment fragment) {
super.onFragmentDetached(fm, fragment);
LogHelper.d(TAG, "onFragmentDetached: " + fragment);
if (fragment instanceof DbDebugFragment) {
DokitConstant.DB_DEBUG_FRAGMENT = null;
}
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onFragmentDetached(fragment);
}
}
}
package com.didichuxing.doraemonkit;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.widget.Toast;
import com.amitshekhar.DebugDB;
import com.amitshekhar.debug.encrypt.sqlite.DebugDBEncryptFactory;
......@@ -19,8 +12,8 @@ import com.blankj.utilcode.util.NetworkUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.Utils;
import com.didichuxing.doraemonkit.aop.OkHttpHook;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.constant.SharedPrefsKey;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.kit.IKit;
......@@ -30,7 +23,6 @@ import com.didichuxing.doraemonkit.kit.colorpick.ColorPickerKit;
import com.didichuxing.doraemonkit.kit.crash.CrashCaptureKit;
import com.didichuxing.doraemonkit.kit.custom.CustomKit;
import com.didichuxing.doraemonkit.kit.dataclean.DataCleanKit;
import com.didichuxing.doraemonkit.kit.dbdebug.DbDebugFragment;
import com.didichuxing.doraemonkit.kit.dbdebug.DbDebugKit;
import com.didichuxing.doraemonkit.kit.fileexplorer.FileExplorerKit;
import com.didichuxing.doraemonkit.kit.gpsmock.GpsMockKit;
......@@ -59,17 +51,13 @@ import com.didichuxing.doraemonkit.kit.weaknetwork.WeakNetworkKit;
import com.didichuxing.doraemonkit.kit.webdoor.WebDoorKit;
import com.didichuxing.doraemonkit.kit.webdoor.WebDoorManager;
import com.didichuxing.doraemonkit.ui.UniversalActivity;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.main.FloatIconDokitView;
import com.didichuxing.doraemonkit.ui.main.ToolPanelDokitView;
import com.didichuxing.doraemonkit.util.DoraemonStatisticsUtil;
import com.didichuxing.doraemonkit.util.LifecycleListenerUtil;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.didichuxing.doraemonkit.util.PermissionUtil;
import com.didichuxing.doraemonkit.util.SharedPrefsUtil;
import com.didichuxing.doraemonkit.util.UIUtils;
import com.sjtu.yifei.AbridgeCallBack;
import com.sjtu.yifei.IBridge;
......@@ -77,7 +65,6 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by jintai on 2019/12/18.
......@@ -87,8 +74,6 @@ class DoraemonKitReal {
private static final String TAG = "DoraemonKitReal";
private static boolean sHasRequestPermission;
private static boolean sHasInit = false;
/**
......@@ -96,40 +81,13 @@ class DoraemonKitReal {
*/
private static boolean sEnableUpload = true;
private static Application APPLICATION;
private static DbDebugFragment mDbDebugFragment;
/**
* 用来判断是否接入了dokit插件 如果安装了插件会动态修改这个值为true
*/
private static boolean IS_HOOK = false;
/**
* fragment 生命周期回调
*/
private static FragmentManager.FragmentLifecycleCallbacks sFragmentLifecycleCallbacks = new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentAttached(FragmentManager fm, Fragment fragment, Context context) {
super.onFragmentAttached(fm, fragment, context);
LogHelper.d(TAG, "onFragmentAttached: " + fragment);
if (fragment instanceof DbDebugFragment) {
mDbDebugFragment = (DbDebugFragment) fragment;
}
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onFragmentAttached(fragment);
}
}
@Override
public void onFragmentDetached(FragmentManager fm, Fragment fragment) {
super.onFragmentDetached(fm, fragment);
LogHelper.d(TAG, "onFragmentDetached: " + fragment);
if (fragment instanceof DbDebugFragment) {
mDbDebugFragment = null;
}
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onFragmentDetached(fragment);
}
}
};
static void setDebug(boolean debug) {
LogHelper.setDebug(debug);
......@@ -170,8 +128,8 @@ class DoraemonKitReal {
sHasInit = true;
//赋值
APPLICATION = app;
String strfloatMode = SharedPrefsUtil.getString(app, SharedPrefsKey.FLOAT_START_MODE, "normal");
if (strfloatMode.equals("normal")) {
String strDokitMode = SharedPrefsUtil.getString(app, SharedPrefsKey.FLOAT_START_MODE, "normal");
if (strDokitMode.equals("normal")) {
DokitConstant.IS_NORMAL_FLOAT_MODE = true;
} else {
DokitConstant.IS_NORMAL_FLOAT_MODE = false;
......@@ -186,124 +144,9 @@ class DoraemonKitReal {
OkHttpHook.installInterceptor();
LogHelper.i(TAG, "IS_HOOK====>" + IS_HOOK);
//注册全局的activity生命周期回调
app.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
int startedActivityCounts;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
if (activity instanceof FragmentActivity) {
//注册fragment生命周期回调
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(sFragmentLifecycleCallbacks, true);
}
}
@Override
public void onActivityStarted(Activity activity) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
if (startedActivityCounts == 0) {
DokitViewManager.getInstance().notifyForeground();
}
startedActivityCounts++;
}
/**
* 当activity进入可交互状态
* @param activity
*/
@Override
public void onActivityResumed(Activity activity) {
//如果是leakCanary页面不进行添加
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
//设置app的直接子view的Id
if (UIUtils.getDokitAppContentView(activity) != null) {
UIUtils.getDokitAppContentView(activity).setId(R.id.dokit_app_contentview_id);
}
if (DokitConstant.IS_NORMAL_FLOAT_MODE) {
//显示内置dokitView icon
resumeAndAttachDokitViews(activity);
} else {
//悬浮窗权限 vivo 华为可以不需要动态权限 小米需要
if (PermissionUtil.canDrawOverlays(activity)) {
//系统悬浮窗需要判断浮标是否已经显示
if (!DokitConstant.MAIN_ICON_HAS_SHOW) {
showSystemMainIcon();
}
//生命周期回调
systemDokitViewOnResume(activity);
} else {
//请求悬浮窗权限
requestPermission(activity);
}
}
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onActivityResumed(activity);
}
}
@Override
public void onActivityPaused(Activity activity) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
for (LifecycleListenerUtil.LifecycleListener listener : LifecycleListenerUtil.LIFECYCLE_LISTENERS) {
listener.onActivityPaused(activity);
}
//sCurrentResumedActivity = null;
}
@Override
public void onActivityStopped(Activity activity) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
startedActivityCounts--;
//通知app退出到后台
if (startedActivityCounts == 0) {
DokitViewManager.getInstance().notifyBackground();
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
}
@Override
public void onActivityDestroyed(Activity activity) {
if (ignoreCurrentActivityDokitView(activity)) {
return;
}
//注销fragment的生命周期回调
if (activity instanceof FragmentActivity) {
((FragmentActivity) activity).getSupportFragmentManager().unregisterFragmentLifecycleCallbacks(sFragmentLifecycleCallbacks);
}
DokitViewManager.getInstance().onActivityDestroy(activity);
}
});
app.registerActivityLifecycleCallbacks(new DokitActivityLifecycleCallbacks());
DokitConstant.KIT_MAPS.clear();
//两个条件只要满足一个就可以
if (IS_HOOK) {
}
//业务专区
List<IKit> biz = new ArrayList<>();
//weex专区
......@@ -433,7 +276,7 @@ class DoraemonKitReal {
DokitConstant.KIT_MAPS.put(Category.CLOSE, exit);
DokitConstant.KIT_MAPS.put(Category.VERSION, version);
//初始化悬浮窗管理类
DokitViewManager.getInstance().init(app);
DokitViewManagerProxy.getInstance().init(app);
//上传app基本信息便于统计
if (sEnableUpload) {
DoraemonStatisticsUtil.uploadUserInfo(app);
......@@ -475,8 +318,8 @@ class DoraemonKitReal {
ToastUtils.showShort("当前网络已断开");
try {
DebugDB.shutDown();
if (mDbDebugFragment != null) {
mDbDebugFragment.networkChanged(NetworkUtils.NetworkType.NETWORK_NO);
if (DokitConstant.DB_DEBUG_FRAGMENT != null) {
DokitConstant.DB_DEBUG_FRAGMENT.networkChanged(NetworkUtils.NetworkType.NETWORK_NO);
}
} catch (Exception e) {
e.printStackTrace();
......@@ -491,8 +334,8 @@ class DoraemonKitReal {
DebugDB.shutDown();
DebugDB.initialize(APPLICATION, new DebugDBFactory());
DebugDB.initialize(APPLICATION, new DebugDBEncryptFactory());
if (mDbDebugFragment != null) {
mDbDebugFragment.networkChanged(networkType);
if (DokitConstant.DB_DEBUG_FRAGMENT != null) {
DokitConstant.DB_DEBUG_FRAGMENT.networkChanged(networkType);
}
} catch (Exception e) {
e.printStackTrace();
......@@ -567,15 +410,6 @@ class DoraemonKitReal {
}
private static void requestPermission(Context context) {
if (!PermissionUtil.canDrawOverlays(context) && !sHasRequestPermission) {
Toast.makeText(context, context.getText(R.string.dk_float_permission_toast), Toast.LENGTH_SHORT).show();
//请求悬浮窗权限
PermissionUtil.requestDrawOverlays(context);
sHasRequestPermission = true;
}
}
/**
* 显示系统悬浮窗icon
*/
......@@ -590,48 +424,10 @@ class DoraemonKitReal {
DokitIntent intent = new DokitIntent(FloatIconDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
DokitConstant.MAIN_ICON_HAS_SHOW = true;
}
/**
* 显示所有应该显示的dokitView
*
* @param activity
*/
private static void resumeAndAttachDokitViews(Activity activity) {
DokitViewManager.getInstance().resumeAndAttachDokitViews(activity);
}
/**
* 生命周期回调
*
* @param activity
*/
private static void systemDokitViewOnResume(Activity activity) {
Map<String, AbsDokitView> dokitViewMap = DokitViewManager.getInstance().getDokitViews(activity);
for (AbsDokitView absDokitView : dokitViewMap.values()) {
absDokitView.onResume();
}
}
/**
* 是否忽略在当前的activity上显示浮标
*
* @param activity
* @return
*/
private static boolean ignoreCurrentActivityDokitView(Activity activity) {
String[] ignoreActivityClassNames = new String[]{"DisplayLeakActivity"};
for (String activityClassName : ignoreActivityClassNames) {
if (activity.getClass().getSimpleName().equals(activityClassName)) {
return true;
}
}
return false;
}
static void show() {
DokitConstant.AWAYS_SHOW_MAIN_ICON = true;
......@@ -648,14 +444,14 @@ class DoraemonKitReal {
static void showToolPanel() {
DokitIntent dokitViewIntent = new DokitIntent(ToolPanelDokitView.class);
dokitViewIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(dokitViewIntent);
DokitViewManagerProxy.getInstance().attach(dokitViewIntent);
}
static void hide() {
DokitConstant.MAIN_ICON_HAS_SHOW = false;
DokitConstant.AWAYS_SHOW_MAIN_ICON = false;
DokitViewManager.getInstance().detach(FloatIconDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(FloatIconDokitView.class.getSimpleName());
}
......
......@@ -4,7 +4,7 @@ import android.content.Context;
import com.didichuxing.doraemonkit.constant.CachesKey;
import com.didichuxing.doraemonkit.constant.SharedPrefsKey;
import com.didichuxing.doraemonkit.core.model.LatLng;
import com.didichuxing.doraemonkit.model.LatLng;
import com.didichuxing.doraemonkit.util.CacheUtils;
import com.didichuxing.doraemonkit.util.SharedPrefsUtil;
......
......@@ -3,10 +3,14 @@ package com.didichuxing.doraemonkit.constant;
import android.util.SparseArray;
import com.didichuxing.doraemonkit.kit.IKit;
import com.didichuxing.doraemonkit.kit.dbdebug.DbDebugFragment;
import com.didichuxing.doraemonkit.model.ActivityLifecycleInfo;
import com.didichuxing.doraemonkit.ui.kit.KitItem;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* ================================================
......@@ -35,8 +39,18 @@ public class DokitConstant {
public static String PRODUCT_ID = "";
/**
* 全局DBDebugFragment
*/
public static DbDebugFragment DB_DEBUG_FRAGMENT = null;
/**
* 全局的dokit Kit信息
*/
public static SparseArray<List<IKit>> KIT_MAPS = new SparseArray<>();
public static Map<String, ActivityLifecycleInfo> ACTIVITY_LIFECYCLE_INFOS = new HashMap<>();
public static List<IKit> getKitList(int catgory) {
if (KIT_MAPS.get(catgory) != null) {
return new ArrayList<>(KIT_MAPS.get(catgory));
......
......@@ -14,7 +14,7 @@ import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.AlignRulerConfig;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.util.UIUtils;
/**
......@@ -60,7 +60,7 @@ public class AlignRulerInfoDokitView extends AbsDokitView implements AlignRulerM
postDelayed(new Runnable() {
@Override
public void run() {
mMarker = (AlignRulerMarkerDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), AlignRulerMarkerDokitView.class.getSimpleName());
mMarker = (AlignRulerMarkerDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), AlignRulerMarkerDokitView.class.getSimpleName());
if (mMarker != null) {
mMarker.addPositionChangeListener(AlignRulerInfoDokitView.this);
}
......@@ -83,9 +83,9 @@ public class AlignRulerInfoDokitView extends AbsDokitView implements AlignRulerM
@Override
public void onClick(View v) {
AlignRulerConfig.setAlignRulerOpen(getContext(), false);
DokitViewManager.getInstance().detach(AlignRulerMarkerDokitView.class.getSimpleName());
DokitViewManager.getInstance().detach(AlignRulerLineDokitView.class.getSimpleName());
DokitViewManager.getInstance().detach(AlignRulerInfoDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(AlignRulerMarkerDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(AlignRulerLineDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(AlignRulerInfoDokitView.class.getSimpleName());
}
});
}
......
......@@ -7,7 +7,7 @@ import com.didichuxing.doraemonkit.config.AlignRulerConfig;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* Created by wanglikun on 2018/9/19.
......@@ -31,19 +31,19 @@ public class AlignRulerKit extends AbstractKit {
@Override
public void onClick(Context context) {
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
DokitIntent pageIntent = new DokitIntent(AlignRulerMarkerDokitView.class);
pageIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(pageIntent);
DokitViewManagerProxy.getInstance().attach(pageIntent);
pageIntent = new DokitIntent(AlignRulerLineDokitView.class);
pageIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(pageIntent);
DokitViewManagerProxy.getInstance().attach(pageIntent);
pageIntent = new DokitIntent(AlignRulerInfoDokitView.class);
pageIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(pageIntent);
DokitViewManagerProxy.getInstance().attach(pageIntent);
AlignRulerConfig.setAlignRulerOpen(context, true);
......
......@@ -7,15 +7,13 @@ import android.view.WindowManager;
import android.widget.FrameLayout;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.BarUtils;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.ScreenUtils;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.ui.alignruler.AlignLineView;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* Created by jintai on 2019/09/26.
......@@ -54,7 +52,7 @@ public class AlignRulerLineDokitView extends AbsDokitView implements AlignRulerM
postDelayed(new Runnable() {
@Override
public void run() {
mMarker = (AlignRulerMarkerDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), AlignRulerMarkerDokitView.class.getSimpleName());
mMarker = (AlignRulerMarkerDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), AlignRulerMarkerDokitView.class.getSimpleName());
if (mMarker != null) {
mMarker.addPositionChangeListener(AlignRulerLineDokitView.this);
}
......
......@@ -11,7 +11,7 @@ import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.AlignRulerConfig;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.setting.SettingItem;
import com.didichuxing.doraemonkit.ui.setting.SettingItemAdapter;
import com.didichuxing.doraemonkit.ui.widget.titlebar.HomeTitleBar;
......@@ -50,11 +50,11 @@ public class AlignRulerSettingFragment extends BaseFragment {
if (data.desc == R.string.dk_kit_align_ruler) {
if (on) {
DokitIntent pageIntent = new DokitIntent(AlignRulerMarkerDokitView.class);
DokitViewManager.getInstance().attach(pageIntent);
DokitViewManager.getInstance().attach(new DokitIntent(AlignRulerLineDokitView.class));
DokitViewManagerProxy.getInstance().attach(pageIntent);
DokitViewManagerProxy.getInstance().attach(new DokitIntent(AlignRulerLineDokitView.class));
} else {
DokitViewManager.getInstance().detach(AlignRulerMarkerDokitView.class);
DokitViewManager.getInstance().detach(AlignRulerLineDokitView.class);
DokitViewManagerProxy.getInstance().detach(AlignRulerMarkerDokitView.class);
DokitViewManagerProxy.getInstance().detach(AlignRulerLineDokitView.class);
}
AlignRulerConfig.setAlignRulerOpen(getContext(), on);
}
......
......@@ -14,7 +14,7 @@ import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.colorpicker.ColorPickerView;
import com.didichuxing.doraemonkit.util.ImageUtil;
import com.didichuxing.doraemonkit.util.UIUtils;
......@@ -68,7 +68,7 @@ public class ColorPickerDokitView extends AbsDokitView {
@Override
public void onCreate(Context context) {
mInfoDokitView = (ColorPickerInfoDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), ColorPickerInfoDokitView.class.getSimpleName());
mInfoDokitView = (ColorPickerInfoDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), ColorPickerInfoDokitView.class.getSimpleName());
mImageCapture = new ImageCapture();
mImageCapture.init(context, getBundle());
}
......
......@@ -16,7 +16,7 @@ import com.didichuxing.doraemonkit.config.ColorPickConfig;
import com.didichuxing.doraemonkit.ui.TranslucentActivity;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.util.ColorUtil;
import com.didichuxing.doraemonkit.util.UIUtils;
......@@ -59,8 +59,8 @@ public class ColorPickerInfoDokitView extends AbsDokitView {
@Override
public void onClick(View v) {
ColorPickConfig.setColorPickOpen(getContext(), false);
DokitViewManager.getInstance().detach(ColorPickerDokitView.class.getSimpleName());
DokitViewManager.getInstance().detach(ColorPickerInfoDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(ColorPickerDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(ColorPickerInfoDokitView.class.getSimpleName());
//取色器kit是依赖在当前透明的Activity上的 所以关闭控件时需要finish
if (ActivityUtils.getTopActivity() != null && ActivityUtils.getTopActivity() instanceof TranslucentActivity) {
ActivityUtils.getTopActivity().finish();
......
......@@ -15,7 +15,7 @@ import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.constant.RequestCode;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* Created by wanglikun on 2018/9/15.
......@@ -63,16 +63,16 @@ public class ColorPickerSettingFragment extends BaseFragment {
* @param data
*/
private void showColorPicker(Intent data) {
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
DokitIntent pageIntent = new DokitIntent(ColorPickerInfoDokitView.class);
pageIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(pageIntent);
DokitViewManagerProxy.getInstance().attach(pageIntent);
pageIntent = new DokitIntent(ColorPickerDokitView.class);
pageIntent.bundle = data.getExtras();
pageIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(pageIntent);
DokitViewManagerProxy.getInstance().attach(pageIntent);
}
......
......@@ -15,7 +15,7 @@ import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.kit.common.PerformanceDataManager;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.dialog.DialogInfo;
import com.didichuxing.doraemonkit.ui.dialog.SimpleDialogListener;
import com.didichuxing.doraemonkit.ui.setting.SettingItem;
......@@ -112,7 +112,7 @@ public class MonitorDataUploadFragment extends BaseFragment {
mCommitButton.setText(R.string.dk_platform_monitor_data_button);
PerformanceDataManager.getInstance().stopUploadMonitorData();
if (PerformanceSpInfoConfig.isFrameUiOpen(getContext())) {
DokitViewManager.getInstance().detach(RealTimePerformDataDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(RealTimePerformDataDokitView.class.getSimpleName());
}
return true;
......@@ -135,7 +135,7 @@ public class MonitorDataUploadFragment extends BaseFragment {
if (PerformanceSpInfoConfig.isFrameUiOpen(getContext())) {
DokitIntent dokitIntent = new DokitIntent(RealTimePerformDataDokitView.class);
dokitIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(dokitIntent);
DokitViewManagerProxy.getInstance().attach(dokitIntent);
}
......
......@@ -17,7 +17,7 @@ import com.didichuxing.doraemonkit.kit.common.PerformanceDataManager;
import com.didichuxing.doraemonkit.kit.timecounter.TimeCounterManager;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.util.UIUtils;
/**
......@@ -94,7 +94,7 @@ public class RealTimePerformDataDokitView extends AbsDokitView {
mIvClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DokitViewManager.getInstance().detach(RealTimePerformDataDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(RealTimePerformDataDokitView.class.getSimpleName());
}
});
......
......@@ -16,7 +16,7 @@ import android.widget.Toast;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.GpsMockConfig;
import com.didichuxing.doraemonkit.core.model.LatLng;
import com.didichuxing.doraemonkit.model.LatLng;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.setting.SettingItem;
import com.didichuxing.doraemonkit.ui.setting.SettingItemAdapter;
......
......@@ -5,7 +5,7 @@ import android.content.Context;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.GpsMockConfig;
import com.didichuxing.doraemonkit.constant.FragmentIndex;
import com.didichuxing.doraemonkit.core.model.LatLng;
import com.didichuxing.doraemonkit.model.LatLng;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
......
......@@ -7,7 +7,7 @@ import com.didichuxing.doraemonkit.config.LayoutBorderConfig;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* Created by wanglikun on 2019/1/7
......@@ -32,11 +32,11 @@ public class LayoutBorderKit extends AbstractKit {
public void onClick(Context context) {
//隐藏当前工具dokitview
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
DokitIntent intent = new DokitIntent(LayoutLevelDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
LayoutBorderManager.getInstance().start();
......
......@@ -11,7 +11,7 @@ import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.LayoutBorderConfig;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.setting.SettingItem;
import com.didichuxing.doraemonkit.ui.setting.SettingItemAdapter;
import com.didichuxing.doraemonkit.ui.widget.titlebar.HomeTitleBar;
......@@ -58,9 +58,9 @@ public class LayoutBorderSettingFragment extends BaseFragment {
if (on) {
DokitIntent intent = new DokitIntent(LayoutLevelDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
} else {
DokitViewManager.getInstance().detach(LayoutLevelDokitView.class);
DokitViewManagerProxy.getInstance().detach(LayoutLevelDokitView.class);
}
LayoutBorderConfig.setLayoutLevelOpen(on);
}
......
......@@ -14,13 +14,12 @@ import android.widget.FrameLayout;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.LayoutBorderConfig;
import com.didichuxing.doraemonkit.ui.UniversalActivity;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.layoutborder.ScalpelFrameLayout;
import com.didichuxing.doraemonkit.util.LifecycleListenerUtil;
import com.didichuxing.doraemonkit.util.LogHelper;
......@@ -138,7 +137,7 @@ public class LayoutLevelDokitView extends AbsDokitView {
LayoutBorderConfig.setLayoutBorderOpen(false);
LayoutBorderManager.getInstance().stop();
DokitViewManager.getInstance().detach(LayoutLevelDokitView.this);
DokitViewManagerProxy.getInstance().detach(LayoutLevelDokitView.this);
}
});
......
......@@ -11,7 +11,7 @@ import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.LogInfoConfig;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.setting.SettingItem;
import com.didichuxing.doraemonkit.ui.setting.SettingItemAdapter;
import com.didichuxing.doraemonkit.ui.widget.titlebar.HomeTitleBar;
......@@ -50,9 +50,9 @@ public class LogInfoSettingFragment extends BaseFragment {
if (on) {
DokitIntent intent = new DokitIntent(LogInfoDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
} else {
DokitViewManager.getInstance().detach(LogInfoDokitView.class);
DokitViewManagerProxy.getInstance().detach(LogInfoDokitView.class);
}
LogInfoConfig.setLogInfoOpen(getContext(), on);
}
......
......@@ -3,14 +3,11 @@ package com.didichuxing.doraemonkit.kit.network.room_db;
import android.text.TextUtils;
import com.blankj.utilcode.util.ThreadUtils;
import com.chad.library.adapter.base.entity.MultiItemEntity;
import com.didichuxing.doraemonkit.BuildConfig;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import org.json.JSONException;
import org.json.JSONObject;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
......@@ -29,7 +26,7 @@ import java.util.Map;
public class DokitDbManager<T extends AbsMockApiBean> {
private final DokitDatabase mDb = DokitViewManager.getInstance().getDb();
private final DokitDatabase mDb = DokitViewManagerProxy.getInstance().getDb();
private Map<String, List<T>> mGlobalInterceptApiMaps = new HashMap<>();
private Map<String, List<T>> mGlobalTemplateApiMaps = new HashMap<>();
......
......@@ -6,7 +6,7 @@ import com.didichuxing.doraemonkit.DoraemonKit;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* Created by wanglikun on 2018/10/26.
......@@ -32,7 +32,7 @@ public class TemporaryCloseKit extends AbstractKit {
@Override
public void onClick(Context context) {
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
DoraemonKit.hide();
}
......
......@@ -7,7 +7,7 @@ import com.didichuxing.doraemonkit.kit.timecounter.bean.CounterInfo;
import com.didichuxing.doraemonkit.kit.timecounter.counter.ActivityCounter;
import com.didichuxing.doraemonkit.kit.timecounter.counter.AppCounter;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import java.util.List;
......@@ -71,10 +71,10 @@ public class TimeCounterManager {
return;
}
mIsRunning = true;
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
DokitIntent pageIntent = new DokitIntent(TimeCounterDokitView.class);
pageIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(pageIntent);
DokitViewManagerProxy.getInstance().attach(pageIntent);
}
......@@ -89,7 +89,7 @@ public class TimeCounterManager {
}
Looper.getMainLooper().setMessageLogging(null);
mIsRunning = false;
DokitViewManager.getInstance().detach(TimeCounterDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(TimeCounterDokitView.class.getSimpleName());
}
......
......@@ -3,11 +3,9 @@ package com.didichuxing.doraemonkit.kit.timecounter.counter;
import android.app.Activity;
import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.didichuxing.doraemonkit.kit.timecounter.TimeCounterDokitView;
import com.didichuxing.doraemonkit.kit.timecounter.bean.CounterInfo;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import java.util.ArrayList;
import java.util.List;
......@@ -125,7 +123,7 @@ public class ActivityCounter {
counterInfo.totalCost = mTotalCostTime;
counterInfo.otherCost = mOtherCostTime;
mCounterInfos.add(counterInfo);
TimeCounterDokitView dokitView = (TimeCounterDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), TimeCounterDokitView.class.getSimpleName());
TimeCounterDokitView dokitView = (TimeCounterDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), TimeCounterDokitView.class.getSimpleName());
if (dokitView != null) {
dokitView.showInfo(counterInfo);
}
......
......@@ -3,11 +3,10 @@ package com.didichuxing.doraemonkit.kit.uiperformance;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.core.model.ViewInfo;
import com.didichuxing.doraemonkit.model.ViewInfo;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.viewcheck.LayoutBorderView;
......
......@@ -8,10 +8,10 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.core.model.ViewInfo;
import com.didichuxing.doraemonkit.model.ViewInfo;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.widget.textview.LabelTextView;
import java.util.List;
......@@ -39,8 +39,8 @@ public class UIPerformanceInfoDokitView extends AbsDokitView implements UIPerfor
mClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DokitViewManager.getInstance().detach(UIPerformanceDisplayDokitView.class.getSimpleName());
DokitViewManager.getInstance().detach(UIPerformanceInfoDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(UIPerformanceDisplayDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(UIPerformanceInfoDokitView.class.getSimpleName());
UIPerformanceManager.getInstance().stop();
}
});
......
......@@ -6,7 +6,7 @@ import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* Created by wanglikun on 2019-06-27
......@@ -32,14 +32,14 @@ public class UIPerformanceKit extends AbstractKit {
public void onClick(Context context) {
UIPerformanceManager.getInstance().start(context);
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
DokitIntent intent = new DokitIntent(UIPerformanceDisplayDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
DokitIntent intentInfo = new DokitIntent(UIPerformanceInfoDokitView.class);
intentInfo.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intentInfo);
DokitViewManagerProxy.getInstance().attach(intentInfo);
//直接显示层级
UIPerformanceManager.getInstance().initRefresh();
}
......
......@@ -9,7 +9,7 @@ import android.view.View;
import android.view.ViewGroup;
import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.core.model.ViewInfo;
import com.didichuxing.doraemonkit.model.ViewInfo;
import com.didichuxing.doraemonkit.util.LifecycleListenerUtil;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.didichuxing.doraemonkit.util.UIUtils;
......
package com.didichuxing.doraemonkit.kit.viewcheck;
import android.app.ActionBar;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
......@@ -8,10 +7,10 @@ import android.widget.FrameLayout;
import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.core.model.ViewInfo;
import com.didichuxing.doraemonkit.model.ViewInfo;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.viewcheck.LayoutBorderView;
/**
......@@ -29,7 +28,7 @@ public class ViewCheckDrawDokitView extends AbsDokitView implements ViewCheckDok
@Override
public void onDestroy() {
super.onDestroy();
ViewCheckDokitView page = (ViewCheckDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), ViewCheckDokitView.class.getSimpleName());
ViewCheckDokitView page = (ViewCheckDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), ViewCheckDokitView.class.getSimpleName());
if (page != null) {
page.removeViewSelectListener(this);
}
......@@ -56,7 +55,7 @@ public class ViewCheckDrawDokitView extends AbsDokitView implements ViewCheckDok
postDelayed(new Runnable() {
@Override
public void run() {
ViewCheckDokitView dokitView = (ViewCheckDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), ViewCheckDokitView.class.getSimpleName());
ViewCheckDokitView dokitView = (ViewCheckDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), ViewCheckDokitView.class.getSimpleName());
if (dokitView != null) {
dokitView.setViewSelectListener(ViewCheckDrawDokitView.this);
}
......
......@@ -20,7 +20,7 @@ import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.ViewCheckConfig;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.util.ColorUtil;
import com.didichuxing.doraemonkit.util.UIUtils;
......@@ -48,7 +48,7 @@ public class ViewCheckInfoDokitView extends AbsDokitView implements ViewCheckDok
@Override
public void onDestroy() {
super.onDestroy();
ViewCheckDokitView dokitView = (ViewCheckDokitView) DokitViewManager.getInstance().getDokitView(getActivity(), ViewCheckDokitView.class.getSimpleName());
ViewCheckDokitView dokitView = (ViewCheckDokitView) DokitViewManagerProxy.getInstance().getDokitView(getActivity(), ViewCheckDokitView.class.getSimpleName());
if (dokitView != null) {
dokitView.removeViewSelectListener(this);
}
......@@ -72,15 +72,15 @@ public class ViewCheckInfoDokitView extends AbsDokitView implements ViewCheckDok
@Override
public void onClick(View v) {
ViewCheckConfig.setViewCheckOpen(getContext(), false);
DokitViewManager.getInstance().detach(ViewCheckDrawDokitView.class.getSimpleName());
DokitViewManager.getInstance().detach(ViewCheckInfoDokitView.class.getSimpleName());
DokitViewManager.getInstance().detach(ViewCheckDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(ViewCheckDrawDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(ViewCheckInfoDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().detach(ViewCheckDokitView.class.getSimpleName());
}
});
postDelayed(new Runnable() {
@Override
public void run() {
ViewCheckDokitView dokitView = (ViewCheckDokitView) DokitViewManager.getInstance().getDokitView(getActivity(), ViewCheckDokitView.class.getSimpleName());
ViewCheckDokitView dokitView = (ViewCheckDokitView) DokitViewManagerProxy.getInstance().getDokitView(getActivity(), ViewCheckDokitView.class.getSimpleName());
if (dokitView != null) {
dokitView.setViewSelectListener(ViewCheckInfoDokitView.this);
}
......
......@@ -7,7 +7,7 @@ import com.didichuxing.doraemonkit.config.ViewCheckConfig;
import com.didichuxing.doraemonkit.kit.AbstractKit;
import com.didichuxing.doraemonkit.kit.Category;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* Created by wanglikun on 2018/11/20.
......@@ -31,19 +31,19 @@ public class ViewCheckerKit extends AbstractKit {
@Override
public void onClick(Context context) {
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
DokitIntent intent = new DokitIntent(ViewCheckDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
intent = new DokitIntent(ViewCheckDrawDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
intent = new DokitIntent(ViewCheckInfoDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
ViewCheckConfig.setViewCheckOpen(context, true);
......
package com.didichuxing.doraemonkit.model;
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2019-12-31-11:37
* 描 述:
* 修订历史:
* ================================================
*/
public class ActivityLifecycleInfo {
/**
* activityLifeCycleCount = 1 页面创建调用onResume
* activityLifeCycleCount > 1 页面创建返回onResume
*/
public static final int ACTIVITY_LIFECYCLE_CREATE2RESUME = 1;
/**
* 生命周期是否已经调用过stop 交叉判断是第一次调用resume还是页面返回调用resume
*/
private boolean invokeStopMethod = false;
private String activityName;
/**
* activityLifeCycleCount = 1 页面创建调用onResume
* activityLifeCycleCount > 1 页面创建返回onResume
*/
private int activityLifeCycleCount = 0;
public String getActivityName() {
return activityName;
}
public void setActivityName(String activityName) {
this.activityName = activityName;
}
public int getActivityLifeCycleCount() {
return activityLifeCycleCount;
}
public void setActivityLifeCycleCount(int activityLifeCycleCount) {
this.activityLifeCycleCount = activityLifeCycleCount;
}
public boolean isInvokeStopMethod() {
return invokeStopMethod;
}
public void setInvokeStopMethod(boolean invokeStopMethod) {
this.invokeStopMethod = invokeStopMethod;
}
}
package com.didichuxing.doraemonkit.core.model;
package com.didichuxing.doraemonkit.model;
import android.graphics.Rect;
import android.view.View;
......
......@@ -39,7 +39,7 @@ import java.lang.ref.WeakReference;
* 修订历史:
* ================================================
*/
public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEventListener, DokitViewManager.DokitViewAttachedListener {
public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEventListener, DokitViewManagerProxy.DokitViewAttachedListener {
private String TAG = this.getClass().getSimpleName();
/**
......@@ -47,7 +47,7 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
*/
public TouchProxy mTouchProxy = new TouchProxy(this);
protected WindowManager mWindowManager = DokitViewManager.getInstance().getWindowManager();
protected WindowManager mWindowManager = DokitViewManagerProxy.getInstance().getWindowManager();
/**
* 创建FrameLayout#LayoutParams 内置悬浮窗调用
*/
......@@ -107,18 +107,18 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
TAG = this.getClass().getSimpleName();
LogHelper.i(TAG, "performCreate===>" + TAG);
try {
if (DokitViewManager.getInstance().getLastDokitViewPosInfo(mTag) == null) {
if (DokitViewManagerProxy.getInstance().getLastDokitViewPosInfo(mTag) == null) {
mLastDokitViewPosInfo = new LastDokitViewPosInfo();
DokitViewManager.getInstance().saveLastDokitViewPosInfo(mTag, mLastDokitViewPosInfo);
DokitViewManagerProxy.getInstance().saveLastDokitViewPosInfo(mTag, mLastDokitViewPosInfo);
} else {
mLastDokitViewPosInfo = DokitViewManager.getInstance().getLastDokitViewPosInfo(mTag);
mLastDokitViewPosInfo = DokitViewManagerProxy.getInstance().getLastDokitViewPosInfo(mTag);
}
//创建主线程handler
mHandler = new Handler(Looper.myLooper());
//调用onCreate方法
onCreate(context);
if (!isNormalMode()) {
DokitViewManager.getInstance().addDokitViewAttachedListener(this);
DokitViewManagerProxy.getInstance().addDokitViewAttachedListener(this);
}
if (isNormalMode()) {
mRootView = new DokitFrameLayout(context);
......@@ -227,7 +227,7 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
* 用于普通模式下的横竖屏切换
*/
private void portraitOrLandscape(FrameLayout.LayoutParams params) {
Point point = DokitViewManager.getInstance().getDokitViewPos(mTag);
Point point = DokitViewManagerProxy.getInstance().getDokitViewPos(mTag);
if (point != null) {
//横竖屏切换兼容
if (ScreenUtils.isPortrait()) {
......@@ -286,7 +286,7 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
params.gravity = mDokitViewLayoutParams.gravity;
params.width = mDokitViewLayoutParams.width;
params.height = mDokitViewLayoutParams.height;
Point point = DokitViewManager.getInstance().getDokitViewPos(mTag);
Point point = DokitViewManagerProxy.getInstance().getDokitViewPos(mTag);
if (point != null) {
params.x = point.x;
params.y = point.y;
......@@ -300,9 +300,9 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
@Override
public void onDestroy() {
if (!isNormalMode()) {
DokitViewManager.getInstance().removeDokitViewAttachedListener(this);
DokitViewManagerProxy.getInstance().removeDokitViewAttachedListener(this);
}
DokitViewManager.getInstance().removeLastDokitViewPosInfo(mTag);
DokitViewManagerProxy.getInstance().removeLastDokitViewPosInfo(mTag);
mAttachActivity = null;
}
......@@ -392,9 +392,9 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
} else {
//保存在内存中
if (isNormalMode()) {
DokitViewManager.getInstance().saveDokitViewPos(mTag, mFrameLayoutParams.leftMargin, mFrameLayoutParams.topMargin);
DokitViewManagerProxy.getInstance().saveDokitViewPos(mTag, mFrameLayoutParams.leftMargin, mFrameLayoutParams.topMargin);
} else {
DokitViewManager.getInstance().saveDokitViewPos(mTag, mWindowLayoutParams.x, mWindowLayoutParams.y);
DokitViewManagerProxy.getInstance().saveDokitViewPos(mTag, mWindowLayoutParams.x, mWindowLayoutParams.y);
}
}
......@@ -538,7 +538,7 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
* 将当前dokitView于activity解绑
*/
public void detach() {
DokitViewManager.getInstance().detach(this);
DokitViewManagerProxy.getInstance().detach(this);
}
/**
......@@ -567,7 +567,7 @@ public abstract class AbsDokitView implements DokitView, TouchProxy.OnTouchEvent
mFrameLayoutParams.leftMargin = FloatIconConfig.getLastPosX(getContext());
mFrameLayoutParams.topMargin = FloatIconConfig.getLastPosY(getContext());
} else {
Point point = DokitViewManager.getInstance().getDokitViewPos(tag);
Point point = DokitViewManagerProxy.getInstance().getDokitViewPos(tag);
if (point != null) {
mFrameLayoutParams.leftMargin = point.x;
mFrameLayoutParams.topMargin = point.y;
......
......@@ -73,7 +73,7 @@ public class BaseFragment extends Fragment {
} catch (Exception e) {
e.printStackTrace();
}
DokitViewManager.getInstance().detach(FloatIconDokitView.class);
DokitViewManagerProxy.getInstance().detach(FloatIconDokitView.class);
}
......@@ -138,7 +138,7 @@ public class BaseFragment extends Fragment {
super.onDestroyView();
DokitIntent intent = new DokitIntent(FloatIconDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
}
public DialogProvider showDialog(DialogInfo dialogInfo) {
......
......@@ -96,7 +96,24 @@ public interface DokitViewManagerInterface {
*/
void resumeAndAttachDokitViews(Activity activity);
/**
* main activity 创建时回调
*
* @param activity
*/
void onMainActivityCreate(Activity activity);
/**
* 除main activity 以外 其他activty 创建时回调
*
* @param activity
*/
void onActivityCreate(Activity activity);
/**
* 页面回退的时候调用
*
* @param activity
*/
void onActivityResume(Activity activity);
}
......@@ -20,8 +20,8 @@ import java.util.Map;
* 浮标管理类
*/
public class DokitViewManager implements DokitViewManagerInterface {
public static final String TAG = "DokitViewManager";
public class DokitViewManagerProxy implements DokitViewManagerInterface {
public static final String TAG = "DokitViewManagerProxy";
/**
* 每个类型在页面中的位置 只保存marginLeft 和marginTop
*/
......@@ -41,11 +41,11 @@ public class DokitViewManager implements DokitViewManagerInterface {
* 静态内部类单例
*/
private static class Holder {
private static DokitViewManager INSTANCE = new DokitViewManager();
private static DokitViewManagerProxy INSTANCE = new DokitViewManagerProxy();
}
public static DokitViewManager getInstance() {
return DokitViewManager.Holder.INSTANCE;
public static DokitViewManagerProxy getInstance() {
return DokitViewManagerProxy.Holder.INSTANCE;
}
......@@ -145,6 +145,21 @@ public class DokitViewManager implements DokitViewManagerInterface {
mDokitViewManager.resumeAndAttachDokitViews(activity);
}
@Override
public void onMainActivityCreate(Activity activity) {
}
@Override
public void onActivityCreate(Activity activity) {
}
@Override
public void onActivityResume(Activity activity) {
}
/**
* 在当前Activity中添加指定悬浮窗
*
......
......@@ -11,15 +11,16 @@ import android.widget.FrameLayout;
import com.blankj.utilcode.util.BarUtils;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.model.ActivityLifecycleInfo;
import com.didichuxing.doraemonkit.ui.UniversalActivity;
import com.didichuxing.doraemonkit.ui.health.CountDownDokitView;
import com.didichuxing.doraemonkit.ui.main.FloatIconDokitView;
import com.didichuxing.doraemonkit.ui.main.ToolPanelDokitView;
import com.didichuxing.doraemonkit.ui.realtime.PerformanceDokitView;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.didichuxing.doraemonkit.util.SystemUtil;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
......@@ -92,60 +93,94 @@ class NormalDokitViewManager implements DokitViewManagerInterface {
}
//app启动
if (mGlobalSingleDokitViews.size() == 0) {
LogHelper.i(TAG, "app 启动==>" + activity.getClass().getSimpleName());
if (activity instanceof UniversalActivity) {
return;
}
//倒计时DokitView
attachCountDownDokitView();
if (!DokitConstant.AWAYS_SHOW_MAIN_ICON) {
DokitConstant.MAIN_ICON_HAS_SHOW = false;
return;
}
DokitIntent dokitIntent = new DokitIntent(FloatIconDokitView.class);
dokitIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
attach(dokitIntent);
DokitConstant.MAIN_ICON_HAS_SHOW = true;
if (SystemUtil.isOnlyFirstLaunchActivity(activity)) {
onMainActivityCreate(activity);
return;
}
ActivityLifecycleInfo activityLifecycleInfo = DokitConstant.ACTIVITY_LIFECYCLE_INFOS.get(activity.getClass().getCanonicalName());
if (activityLifecycleInfo == null) {
return;
}
//新建Activity
if (mActivityDokitViews.get(activity) == null) {
if (mGlobalSingleDokitViews == null) {
LogHelper.e(TAG, "resumeAndAttachDokitViews 方法执行异常");
return;
}
if (activityLifecycleInfo.getActivityLifeCycleCount() == ActivityLifecycleInfo.ACTIVITY_LIFECYCLE_CREATE2RESUME) {
onActivityCreate(activity);
return;
}
//将所有的dokitView添加到新建的Activity中去
for (GlobalSingleDokitViewInfo dokitViewInfo : mGlobalSingleDokitViews.values()) {
LogHelper.i(TAG, " 新建activity==>" + activity.getClass().getSimpleName() + " dokitView==>" + dokitViewInfo.getTag());
if (activity instanceof UniversalActivity && dokitViewInfo.getAbsDokitViewClass() != PerformanceDokitView.class) {
return;
}
//是否过滤掉 入口icon
if (!DokitConstant.AWAYS_SHOW_MAIN_ICON && dokitViewInfo.getAbsDokitViewClass() == FloatIconDokitView.class) {
DokitConstant.MAIN_ICON_HAS_SHOW = false;
continue;
}
if (dokitViewInfo.getAbsDokitViewClass() == FloatIconDokitView.class) {
DokitConstant.MAIN_ICON_HAS_SHOW = true;
}
//activity resume
if (activityLifecycleInfo.getActivityLifeCycleCount() > ActivityLifecycleInfo.ACTIVITY_LIFECYCLE_CREATE2RESUME) {
onActivityResume(activity);
}
DokitIntent dokitIntent = new DokitIntent(dokitViewInfo.getAbsDokitViewClass());
dokitIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
dokitIntent.bundle = dokitViewInfo.getBundle();
attach(dokitIntent);
}
//倒计时DokitView
attachCountDownDokitView();
}
/**
* 应用启动
*/
@Override
public void onMainActivityCreate(Activity activity) {
LogHelper.i(TAG, "app 启动==>" + activity.getClass().getSimpleName());
if (activity instanceof UniversalActivity) {
return;
}
//倒计时DokitView
attachCountDownDokitView();
//activity resume
if (!DokitConstant.AWAYS_SHOW_MAIN_ICON) {
DokitConstant.MAIN_ICON_HAS_SHOW = false;
return;
}
DokitIntent dokitIntent = new DokitIntent(FloatIconDokitView.class);
dokitIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
attach(dokitIntent);
DokitConstant.MAIN_ICON_HAS_SHOW = true;
}
/**
* 新建activity
*
* @param activity
*/
@Override
public void onActivityCreate(Activity activity) {
if (mGlobalSingleDokitViews == null) {
LogHelper.e(TAG, "resumeAndAttachDokitViews 方法执行异常");
return;
}
//将所有的dokitView添加到新建的Activity中去
for (GlobalSingleDokitViewInfo dokitViewInfo : mGlobalSingleDokitViews.values()) {
LogHelper.i(TAG, " 新建activity==>" + activity.getClass().getSimpleName() + " dokitView==>" + dokitViewInfo.getTag());
if (activity instanceof UniversalActivity && dokitViewInfo.getAbsDokitViewClass() != PerformanceDokitView.class) {
return;
}
//是否过滤掉 入口icon
if (!DokitConstant.AWAYS_SHOW_MAIN_ICON && dokitViewInfo.getAbsDokitViewClass() == FloatIconDokitView.class) {
DokitConstant.MAIN_ICON_HAS_SHOW = false;
continue;
}
if (dokitViewInfo.getAbsDokitViewClass() == FloatIconDokitView.class) {
DokitConstant.MAIN_ICON_HAS_SHOW = true;
}
DokitIntent dokitIntent = new DokitIntent(dokitViewInfo.getAbsDokitViewClass());
dokitIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
dokitIntent.bundle = dokitViewInfo.getBundle();
attach(dokitIntent);
}
//倒计时DokitView
attachCountDownDokitView();
}
/**
* activity onResume
*
* @param activity
*/
@Override
public void onActivityResume(Activity activity) {
Map<String, AbsDokitView> existDokitViews = mActivityDokitViews.get(activity);
//先清除楚页面上启动模式为DokitIntent.MODE_ONCE 的dokitView
for (AbsDokitView existDokitView : existDokitViews.values()) {
......@@ -187,7 +222,6 @@ class NormalDokitViewManager implements DokitViewManagerInterface {
attach(dokitIntent);
}
}
}
/**
......
......@@ -5,8 +5,14 @@ import android.content.Context;
import android.text.TextUtils;
import android.view.WindowManager;
import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.model.ActivityLifecycleInfo;
import com.didichuxing.doraemonkit.ui.UniversalActivity;
import com.didichuxing.doraemonkit.ui.health.CountDownDokitView;
import com.didichuxing.doraemonkit.ui.main.FloatIconDokitView;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.didichuxing.doraemonkit.util.SystemUtil;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -26,16 +32,16 @@ class SystemDokitViewManager implements DokitViewManagerInterface {
* https://blog.csdn.net/awenyini/article/details/78265284
* https://yuqirong.me/2017/09/28/Window%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90(%E4%B8%80)%EF%BC%9A%E4%B8%8EDecorView%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B/
*/
private WindowManager mWindowManager = DokitViewManager.getInstance().getWindowManager();
private WindowManager mWindowManager = DokitViewManagerProxy.getInstance().getWindowManager();
private Context mContext;
private List<AbsDokitView> mDokitViews = new ArrayList<>();
private List<DokitViewManager.DokitViewAttachedListener> mListeners = new ArrayList<>();
private List<DokitViewManagerProxy.DokitViewAttachedListener> mListeners = new ArrayList<>();
/**
* 获取页面上所有的dokitViews
*
* @return
* @return map
*/
@Override
public Map<String, AbsDokitView> getDokitViews(Activity activity) {
......@@ -72,6 +78,88 @@ class SystemDokitViewManager implements DokitViewManagerInterface {
//获取WindowService
}
/**
* @param activity
*/
@Override
public void resumeAndAttachDokitViews(Activity activity) {
if (ActivityUtils.getTopActivity() instanceof UniversalActivity) {
return;
}
//app启动
if (SystemUtil.isOnlyFirstLaunchActivity(activity)) {
onMainActivityCreate(activity);
}
ActivityLifecycleInfo activityLifecycleInfo = DokitConstant.ACTIVITY_LIFECYCLE_INFOS.get(activity.getClass().getCanonicalName());
//新建Activity
if (activityLifecycleInfo != null && activityLifecycleInfo.getActivityLifeCycleCount() == ActivityLifecycleInfo.ACTIVITY_LIFECYCLE_CREATE2RESUME) {
onActivityCreate(activity);
}
//activity resume
if (activityLifecycleInfo != null && activityLifecycleInfo.getActivityLifeCycleCount() > ActivityLifecycleInfo.ACTIVITY_LIFECYCLE_CREATE2RESUME) {
onActivityResume(activity);
}
//生命周期回调
Map<String, AbsDokitView> dokitViewMap = getDokitViews(activity);
for (AbsDokitView absDokitView : dokitViewMap.values()) {
absDokitView.onResume();
}
}
/**
* 添加倒计时DokitView
*/
private void attachCountDownDokitView() {
DokitIntent dokitIntent = new DokitIntent(CountDownDokitView.class);
dokitIntent.mode = DokitIntent.MODE_ONCE;
attach(dokitIntent);
}
@Override
public void onMainActivityCreate(Activity activity) {
//倒计时DokitView
attachCountDownDokitView();
if (!DokitConstant.AWAYS_SHOW_MAIN_ICON) {
return;
}
//添加main icon
DokitIntent intent = new DokitIntent(FloatIconDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManagerProxy.getInstance().attach(intent);
DokitConstant.MAIN_ICON_HAS_SHOW = true;
}
@Override
public void onActivityCreate(Activity activity) {
//如果倒计时浮标没显示则重新添加
AbsDokitView countDownDokitView = getDokitView(activity, CountDownDokitView.class.getSimpleName());
if (countDownDokitView == null) {
attachCountDownDokitView();
} else {
//重置倒计时
((CountDownDokitView) countDownDokitView).resetTime();
}
}
@Override
public void onActivityResume(Activity activity) {
//移除倒计时浮标
AbsDokitView countDownDokitView = getDokitView(activity, CountDownDokitView.class.getSimpleName());
if (countDownDokitView != null) {
//移除倒计时控件
detach(countDownDokitView);
}
}
/**
* 添加悬浮窗
*
......@@ -106,7 +194,7 @@ class SystemDokitViewManager implements DokitViewManagerInterface {
dokitView.onResume();
if (!DokitConstant.IS_NORMAL_FLOAT_MODE) {
for (DokitViewManager.DokitViewAttachedListener listener : mListeners) {
for (DokitViewManagerProxy.DokitViewAttachedListener listener : mListeners) {
listener.onDokitViewAdd(dokitView);
}
}
......@@ -176,28 +264,17 @@ class SystemDokitViewManager implements DokitViewManagerInterface {
}
/**
* 不需要实现
*
* @param activity
*/
@Override
public void resumeAndAttachDokitViews(Activity activity) {
}
/**
* 在每一个float page创建时 添加监听器
*
* @param listener
*/
void addListener(DokitViewManager.DokitViewAttachedListener listener) {
void addListener(DokitViewManagerProxy.DokitViewAttachedListener listener) {
mListeners.add(listener);
}
void removeListener(DokitViewManager.DokitViewAttachedListener listener) {
void removeListener(DokitViewManagerProxy.DokitViewAttachedListener listener) {
mListeners.remove(listener);
}
......
......@@ -12,7 +12,7 @@ import com.blankj.utilcode.util.ConvertUtils;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* ================================================
......@@ -51,13 +51,22 @@ public class CountDownDokitView extends AbsDokitView {
@Override
public void onFinish() {
DokitViewManager.getInstance().detach(CountDownDokitView.this);
DokitViewManagerProxy.getInstance().detach(CountDownDokitView.this);
}
};
//启动倒计时
mCountDownTimer.start();
}
/**
* 重置倒计时
*/
public void resetTime() {
if (mCountDownTimer != null) {
mCountDownTimer.start();
}
}
@Override
public void initDokitViewLayoutParams(DokitViewLayoutParams params) {
params.height = DokitViewLayoutParams.WRAP_CONTENT;
......@@ -70,6 +79,12 @@ public class CountDownDokitView extends AbsDokitView {
@Override
public void onDestroy() {
super.onDestroy();
if (isNormalMode()) {
if (mCountDownTimer != null) {
mCountDownTimer.cancel();
mCountDownTimer = null;
}
}
}
}
......@@ -8,7 +8,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.widget.recyclerview.AbsRecyclerAdapter;
import com.didichuxing.doraemonkit.ui.widget.recyclerview.AbsViewBinder;
......@@ -58,7 +58,7 @@ public class KitAdapter extends AbsRecyclerAdapter<AbsViewBinder<KitItem>, KitIt
super.onViewClick(view, data);
//常规模式下点击常用工具不隐藏工具面板
//if (data.kit.getCategory() != Category.TOOLS && DoraemonKit.IS_NORMAL_FLOAT_MODE) {
DokitViewManager.getInstance().detachToolPanel();
DokitViewManagerProxy.getInstance().detachToolPanel();
//}
data.kit.onClick(getContext());
}
......
......@@ -10,7 +10,7 @@ import com.didichuxing.doraemonkit.config.FloatIconConfig;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
/**
* 悬浮按钮
......@@ -35,7 +35,7 @@ public class FloatIconDokitView extends AbsDokitView {
public void onClick(View v) {
DokitIntent dokitViewIntent = new DokitIntent(ToolPanelDokitView.class);
dokitViewIntent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(dokitViewIntent);
DokitViewManagerProxy.getInstance().attach(dokitViewIntent);
}
});
......@@ -61,10 +61,10 @@ public class FloatIconDokitView extends AbsDokitView {
if (dokitView == this) {
return;
}
DokitViewManager.getInstance().detach(this);
DokitViewManagerProxy.getInstance().detach(this);
DokitIntent intent = new DokitIntent(FloatIconDokitView.class);
intent.mode = DokitIntent.MODE_SINGLE_INSTANCE;
DokitViewManager.getInstance().attach(intent);
DokitViewManagerProxy.getInstance().attach(intent);
}
@Override
......
......@@ -13,7 +13,7 @@ import com.didichuxing.doraemonkit.config.PerformanceMemoryInfoConfig;
import com.didichuxing.doraemonkit.ui.base.AbsDokitView;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewLayoutParams;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.realtime.datasource.DataSourceFactory;
import com.didichuxing.doraemonkit.ui.realtime.datasource.IDataSource;
import com.didichuxing.doraemonkit.ui.realtime.widget.LineChart;
......@@ -232,8 +232,8 @@ public class PerformanceDokitView extends AbsDokitView implements PerformanceClo
private void showSystemPerfoemanceCloseDokitView() {
DokitIntent dokitIntent = new DokitIntent(PerformanceCloseDokitView.class);
DokitViewManager.getInstance().attach(dokitIntent);
mPerformanceCloseDokitView = (PerformanceCloseDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceCloseDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().attach(dokitIntent);
mPerformanceCloseDokitView = (PerformanceCloseDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceCloseDokitView.class.getSimpleName());
if (mPerformanceCloseDokitView != null) {
mPerformanceCloseDokitView.setPerformanceCloseListener(PerformanceDokitView.this);
}
......
......@@ -5,7 +5,7 @@ import android.content.Context;
import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.ui.base.DokitIntent;
import com.didichuxing.doraemonkit.ui.base.DokitViewManager;
import com.didichuxing.doraemonkit.ui.base.DokitViewManagerProxy;
import com.didichuxing.doraemonkit.ui.realtime.datasource.DataSourceFactory;
import java.util.TreeMap;
......@@ -31,11 +31,11 @@ public class PerformanceDokitViewManager {
}
public static void open(int performanceType, String title, int interval, PerformanceFragmentCloseListener listener) {
PerformanceDokitView performanceDokitView = (PerformanceDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
PerformanceDokitView performanceDokitView = (PerformanceDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
if (performanceDokitView == null) {
DokitIntent dokitIntent = new DokitIntent(PerformanceDokitView.class);
DokitViewManager.getInstance().attach(dokitIntent);
performanceDokitView = (PerformanceDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
DokitViewManagerProxy.getInstance().attach(dokitIntent);
performanceDokitView = (PerformanceDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
performanceDokitView.addItem(performanceType, title, interval);
} else {
performanceDokitView.addItem(performanceType, title, interval);
......@@ -50,7 +50,7 @@ public class PerformanceDokitViewManager {
* @param listener
*/
public static void onPerformanceSettingFragmentDestory(PerformanceFragmentCloseListener listener) {
PerformanceDokitView performanceDokitView = (PerformanceDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
PerformanceDokitView performanceDokitView = (PerformanceDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
if (performanceDokitView != null) {
performanceDokitView.removePerformanceFragmentCloseListener(listener);
}
......@@ -60,7 +60,7 @@ public class PerformanceDokitViewManager {
* @param performanceType 参考 DataSourceFactory
*/
public static void close(int performanceType, String title) {
PerformanceDokitView performanceDokitView = (PerformanceDokitView) DokitViewManager.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
PerformanceDokitView performanceDokitView = (PerformanceDokitView) DokitViewManagerProxy.getInstance().getDokitView(ActivityUtils.getTopActivity(), PerformanceDokitView.class.getSimpleName());
if (performanceDokitView != null) {
performanceDokitView.removeItem(performanceType);
}
......
......@@ -11,14 +11,11 @@ import android.util.AttributeSet;
import android.view.View;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.core.model.ViewInfo;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.didichuxing.doraemonkit.model.ViewInfo;
import java.util.ArrayList;
import java.util.List;
import static android.support.constraint.Constraints.TAG;
/**
* Created by wanglikun on 2018/11/23.
*/
......
package com.didichuxing.doraemonkit.util;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.text.TextUtils;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.model.ActivityLifecycleInfo;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
......@@ -104,4 +110,36 @@ public class SystemUtil {
}
return null;
}
/**
* 是否是系统main activity
*
* @return boolean
*/
public static boolean isMainLaunchActivity(Activity activity) {
PackageManager packageManager = activity.getApplication().getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(activity.getPackageName());
if (intent == null) {
return false;
}
ComponentName launchComponentName = intent.getComponent();
ComponentName componentName = activity.getComponentName();
if (launchComponentName != null && componentName.toString().equals(launchComponentName.toString())) {
return true;
}
return false;
}
/**
* 是否是系统启动第一次调用mainActivity 页面回退不算
*
* @return boolean
*/
public static boolean isOnlyFirstLaunchActivity(Activity activity) {
boolean isMainActivity = isMainLaunchActivity(activity);
ActivityLifecycleInfo activityLifecycleInfo = DokitConstant.ACTIVITY_LIFECYCLE_INFOS.get(activity.getClass().getCanonicalName());
return activityLifecycleInfo != null && isMainActivity && !activityLifecycleInfo.isInvokeStopMethod();
}
}
......@@ -4,7 +4,7 @@ import android.content.Context;
import android.webkit.WebView;
import com.didichuxing.doraemonkit.config.GpsMockConfig;
import com.didichuxing.doraemonkit.core.model.LatLng;
import com.didichuxing.doraemonkit.model.LatLng;
import java.io.BufferedReader;
import java.io.IOException;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册