// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.example.zhixue.behaviorcollect.Monitor; import android.app.Activity; import android.app.Application; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.atomic.AtomicBoolean; import static com.example.zhixue.behaviorcollect.Monitor.Result.onAppStart; import static com.example.zhixue.behaviorcollect.Monitor.Result.onClickButton; import static com.example.zhixue.behaviorcollect.Monitor.Result.onPageStart; /** * Created by wangzhixue on 2017/12/26. */ public class Monitor { private static final String TAG = Monitor.class.getName(); public static boolean collectMode = true; public static boolean sShowLog = true; static AtomicBoolean sStart = new AtomicBoolean(false); //当前fragment是否为显示界面 private boolean isFragmentStart = false; private TouchHandle mTouchHandle; static String sLastPageName = "" ; //上一页面名字 static String sCurrentPageName = "" ; //当前页面名字 // public static boolean isCollectMode() { // return collectMode; // } // public static void setCollectMode(boolean collect) { // collectMode = collect; // } private Monitor() { mTouchHandle = new TouchHandle(); mTouchHandle.registerViewClickListener(myViewClickListener); } public static Monitor getInstance() { return MonitorHolder.holder; } public static void init(@NonNull Application application, boolean collect ) { application.registerActivityLifecycleCallbacks(new MonitorActivityLifecycleCallbacks()); collectMode = collect; } private static class MonitorHolder { private static Monitor holder = new Monitor(); private MonitorHolder() { } } private void onActivityPageStart(Activity activity) { if (!collectMode) return; //非收集模式 退出 try { sCurrentPageName = activity.getClass().getSimpleName(); // onAppStart(); //应用启动时上传 onAppStart(activity); //应用启动时上传 onPageStart(activity); } catch (Exception e) { e.printStackTrace(); } } private void onActivityPageEnd() { sLastPageName = sCurrentPageName ; } public void onFragmentPageStart(Fragment fragment) { //如果当前fragment已经开始 则退出 避免重复开始 if (!fragment.getUserVisibleHint()||fragment.isHidden()||!fragment.isResumed()||isFragmentStart)return; String pageName =fragment.getClass().getSimpleName(); if (sCurrentPageName.equals(pageName) ) return;//重复进入 退出 sLastPageName = sCurrentPageName ; sCurrentPageName = pageName; isFragmentStart = true; try { String pageName =fragment.getClass().getSimpleName(); sCurrentPageName = pageName; // onPageStart(fragment); onPageStart(fragment); } catch (Exception e) { e.printStackTrace(); } } public void onFragmentPageEnd(Fragment fragment) { ///如果当前fragment已经结束 则退出 避免重复结束 if (!isFragmentStart) return; //非收集模式 退出 isFragmentStart =false; sLastPageName = sCurrentPageName ; } public void onActivityCreated(Activity activity){ if (!collectMode) return; //非收集模式 退出 } public void onActivityResumed(Activity activity) { if (!collectMode) return; //非收集模式 退出 onActivityPageStart(activity); } public void onActivityPaused(Activity activity) { if (!collectMode) return; //非收集模式 退出 onActivityPageEnd(); } public void dispatchTouchEvent(Activity activity, MotionEvent ev) { if (!collectMode) return; //非收集模式 退出 /*获取当前点击位置,遍历布局,获取当前点击位置对应的view,根据view映射路径,与json文件中的对比*/ if (mTouchHandle != null){ mTouchHandle.eventViewHit(activity,ev); } } public void onFragmentResume(Fragment fragment) { if (!collectMode) return; //非收集模式 退出 onFragmentPageStart(fragment); } public void onFragmentPaused(Fragment fragment) { if (!collectMode) return; //非收集模式 退出 onFragmentPageEnd(fragment); } public void onFragmentHiddenChanged(Fragment fragment, boolean hidden) { if (!collectMode) return; //非收集模式 退出 if (!fragment.isResumed()) return; //未初始化 退出 if (hidden) { onFragmentPageEnd(fragment); } else { onFragmentPageStart(fragment); } } public void setUserVisibleHint(Fragment fragment, boolean isVisibleToUser) { if (!collectMode) return; //非收集模式 退出 if (!fragment.isResumed()) return; //未初始化 退出 if (isVisibleToUser) { onFragmentPageStart(fragment); } else { onFragmentPageEnd(fragment); } } TouchHandle.OnViewClickListener myViewClickListener = new TouchHandle.OnViewClickListener(){ @Override public void onButtonTouch(MotionEvent event, View view){ try { if (event.getAction() == MotionEvent.ACTION_UP ){ String viewName = ""; String viewType = ""; String idName = ViewUtils.getSimpleResourceName(view.getContext(), view.getId()); //获取文本值 viewName =getButtonName(view ); //动态生成view 比如listView if (view.hasOnClickListeners() && TextUtils.isEmpty(idName)){ idName = viewName; } viewType = (view instanceof EditText) ? "text": "button"; // onClickButton(idName,viewName,viewType); onClickButton(idName,viewName,viewType); } } catch (Exception e) { e.printStackTrace(); } } }; private static String getButtonName(View view ){ String viewName = ""; //获取文本值 if (view instanceof TextView){ viewName = ((TextView) view).getText().toString(); }else if (view instanceof ViewGroup){ ViewGroup viewGroup = (ViewGroup)view; int count = viewGroup.getChildCount(); for (int i = 0; i < count; i++) { View itemView = viewGroup.getChildAt(i); String id = ViewUtils.getSimpleResourceName(itemView.getContext(), itemView.getId()); if (itemView instanceof TextView){ viewName = ((TextView) itemView).getText().toString(); break; }else if (itemView instanceof ViewGroup){ String name =getButtonName(itemView); if (null != name){ return name; } } } } return viewName; } /* 获取带日期的时间 */ public String getDateWithTime() { SimpleDateFormat formatterTime = new SimpleDateFormat("yyyy/MM/dd hh:mm"); Date curDateTime = new Date(System.currentTimeMillis());//获取当前时间 return formatterTime.format(curDateTime); } /* 获取格式化日期 */ public String getFormatDate() { SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); Date curDate = new Date(System.currentTimeMillis());//获取当前时间 return formatter.format(curDate); } // /* // *打开app时上传的数据 // */ // public void onAppStart() { // if (!sStart.compareAndSet(false, true)) { // return; // } // if (sShowLog) Log.d("collect" , "----app被打开了 "+getFormatDate()); //// Toast.makeText("----app被打开了 "+getFormatDate(),3).show(); // } // // /* // *打开页面上传的数据 // */ // public void onPageStart(Object object) { // // if (sShowLog) Log.d("collect" , "----打开了新页面 "+object.getClass().getSimpleName()+",上一页面="+sLastPageName); // } // /* // *点击按钮时上传的数据 // */ // public void onClickButton(String idName, String viewName, String viewType) { // if (sShowLog) Log.d("collect" , "----view被点击 idName = "+idName+",viewName = "+viewName+",viewType = "+viewType); // } }