package com.talent.allshare.network; import org.cybergarage.upnp.ControlPoint; import org.cybergarage.util.CommonLog; import org.cybergarage.util.LogFactory; import com.talent.allshare.util.CommonUtil; import android.content.Context; import android.os.Process; public class ControlCenterRunnable implements Runnable{ private static final CommonLog log = LogFactory.createLog(); private static final int REFRESH_DEVICES_INTERVAL = 30 * 1000; public static interface ISearchDeviceListener{ public void onSearchComplete(boolean searchSuccess); } private ControlPoint mCP = null; private Context mContext = null; private boolean mStartComplete = false; private boolean mIsExit = false; private ISearchDeviceListener mSearchDeviceListener; public ControlCenterRunnable(Context context, ControlPoint controlPoint){ mContext = context; mCP = controlPoint; } public void setCompleteFlag(boolean flag){ mStartComplete = flag; } public void setSearchListener(ISearchDeviceListener listener){ mSearchDeviceListener = listener; } public void notifyThread(){ synchronized (this) { notifyAll(); } } public void reset(){ setCompleteFlag(false); notifyThread(); } public void exit(){ mIsExit = true; notifyThread(); } @Override public void run() { log.e("ControlCenterRunnable run..."); Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST); while(true) { synchronized(this) { if (mIsExit){ break; } refreshDevices(); try { wait(REFRESH_DEVICES_INTERVAL); } catch(Exception e) { e.printStackTrace(); } if (mIsExit){ break; } } } log.e("ControlCenterRunnable over..."); } private void refreshDevices(){ log.e("refreshDevices..."); if (!CommonUtil.checkNetState(mContext)){ return ; } try { if (mStartComplete){ boolean searchRet = mCP.search(); log.e("mCP.search() ret = " + searchRet); if (mSearchDeviceListener != null){ mSearchDeviceListener.onSearchComplete(searchRet); } }else{ boolean startRet = mCP.start(); log.e("mCP.start() ret = " + startRet); if (startRet){ mStartComplete = true; } } } catch (Exception e) { e.printStackTrace(); } } }