package com.fancl.iloyalty.service.impl; import java.util.ArrayList; import java.util.List; import android.app.Activity; import com.fancl.iloyalty.AndroidProjectApplication; import com.fancl.iloyalty.asynctask.SubmitUserLogAsyncTask; import com.fancl.iloyalty.service.ActivityMonitorService; import com.fancl.iloyalty.service.callback.ActivityMonitorServiceCallback; import com.fancl.iloyalty.util.LogController; public class ActivityMonitorServiceImpl implements ActivityMonitorService{ private Activity activeActivity; private boolean inBackground = true; private boolean lastCallbackListenerStatus = true; private List<ActivityMonitorServiceCallback> callbackList; public ActivityMonitorServiceImpl() { callbackList = new ArrayList<ActivityMonitorServiceCallback>(); } @Override public Activity getActiveActivity() { return this.activeActivity; } @Override public void activityOnResumed(Activity activity) { // LogController.log("activityOnResumed >>>> activity " + activity); // LogController.log("activityOnResumed >>>> activeActivity " + activeActivity); // LogController.log("activityOnResumed >>>> inBackground " + inBackground); if(activeActivity != null) { if(inBackground) { // LogController.log("activityOnResumed >>>> activeActivity.equals(activity) " + activeActivity.equals(activity)); if(activeActivity.equals(activity)) { synchronized (this) { activeActivity = activity; } } else { // LogController.log("activityOnResumed >>>> activeActivity.isFinishing() " + activeActivity.isFinishing()); if(activeActivity.isFinishing()) { synchronized (this) { activeActivity = activity; } } } } synchronized (this) { activeActivity = activity; } } else { synchronized (this) { activeActivity = activity; } } setInBackground(false); } @Override public void activityOnStopped(Activity activity) { // LogController.log("ActivityMonitorService " + "activityOnStopped " + activeActivity); if(activeActivity != null) { // LogController.log("ActivityMonitorService " + "activityOnStopped " + activity.equals(activeActivity)); if(activity.equals(activeActivity)) { setInBackground(true); } } } private void setInBackground(boolean inBackground) { this.inBackground = inBackground; LogController.log("ActivityMonitorService " + "inBackground set to " + inBackground); if (inBackground && !AndroidProjectApplication.application.firstCallDbChecking) { SubmitUserLogAsyncTask submitUserLogAsyncTask = new SubmitUserLogAsyncTask(); submitUserLogAsyncTask.execute(); } callBackToListener(inBackground); } @Override public boolean isInBackground() { return this.inBackground; } @Override public void addCallbackListener(ActivityMonitorServiceCallback activityMonitorServiceCallback) { if(activityMonitorServiceCallback != null) { callbackList.add(activityMonitorServiceCallback); } } @Override public void removeCallbackListener(ActivityMonitorServiceCallback activityMonitorServiceCallback) { if(activityMonitorServiceCallback != null) { int i; ActivityMonitorServiceCallback callbackInList; for(i = 0 ; i < callbackList.size() ; i++) { callbackInList = callbackList.get(i); if(callbackInList != null) { if(callbackInList.equals(activityMonitorServiceCallback)) { callbackList.remove(i); i--; } } } } } private void callBackToListener(boolean isInBackground) { for(ActivityMonitorServiceCallback activityMonitorServiceCallback : callbackList) { if(activityMonitorServiceCallback != null) { if(lastCallbackListenerStatus != isInBackground) { lastCallbackListenerStatus = isInBackground; if(isInBackground) { activityMonitorServiceCallback.applicationGoingToBackground(); } else { activityMonitorServiceCallback.applicationGoingToForeground(); } } } } } }