package com.basic.security.fragment; import android.content.Intent; import android.os.SystemClock; import android.view.View; import android.widget.AbsListView; import android.widget.ListPopupWindow; import android.widget.PopupWindow; import android.widget.Spinner; import com.basic.security.R; import com.basic.security.base.BaseApplication; import com.basic.security.fragment.helper.HomeGridViewAdapter; import com.basic.security.fragment.helper.HomePlayAlarmVideo; import com.basic.security.manager.AlarmManager; import com.basic.security.manager.SettingManager; import com.basic.security.utils.MemoryUtil; import com.basic.security.utils.RabbitMQConsumer; import com.basic.security.utils.SocketClient; import com.basic.security.utils.ThreadUtil; import org.androidannotations.annotations.AfterInject; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @EFragment(R.layout.fragment_home) public class HomeFragment extends HomePlayAlarmVideo { public List> newSqliteAlarmList; @AfterInject void afterInject() { setRootUrl(); homeRestClient.setRestErrorHandler(myErrorHandler); } public void setRootUrl() { // String ipStr = SettingManager.getIpStr(); // if (localServer) { // homeRestClient.setRootUrl("http://"+ipStr+":8080/ManCarAnaly/alarm"); // } else { // homeRestClient.setRootUrl("http://"+ipStr+":8000/data/api-v/realTime"); // } } static List socketClientList = new ArrayList<>(); public static void startNewSocketClient() { System.out.println("启动新连接"); SocketClient socketClient = new SocketClient(SettingManager.getIpStr(), SettingManager.getPort()); socketClient.start(); socketClientList.add(socketClient); SystemClock.sleep(10*1000); } @Background public void pullAlarmDataList() { SystemClock.sleep(1000); refreshGridView(); while (true) { try{ RabbitMQConsumer.init(); // try { // if (1!=1) { // startNewSocketClient(); // break; // } else { // List socketClientListToRemove = new ArrayList<>(); // for (SocketClient socketClient1 : socketClientList) { // if (System.currentTimeMillis() - socketClient1.lastUpdateTime > 1000*60*2) { //// socketClient1.closeSocket(); // socketClient1.interrupt(); // socketClientListToRemove.add(socketClient1); // } // } // socketClientList.removeAll(socketClientListToRemove); // if (socketClientList.size() == 0) { // startNewSocketClient(); // } // } // } catch (Exception e) { // System.out.println("pullAlarmDataList, " + e.getMessage()); // } } catch (Exception e) { e.printStackTrace(); } finally { SystemClock.sleep(3000); } } } @Override public void show() { for (AlarmListAdapter.ViewHolder viewHolder : viewHolderSet.keySet()) { if (AlarmManager.getAlarmPlaying(viewHolder.alarm)) { AlarmManager.putAlarmPlaying(viewHolder.alarm, false); } } refreshGridView(); } public void refreshGridView() { try { mainActivity().runOnUiThread(new Runnable() { @Override public void run() { for (HomeGridViewAdapter.AlarmListAdapter.ViewHolder viewHolder : viewHolderSet.keySet()) { viewHolder.matchPersonList.onDetachedFromWindow(); } } }); SystemClock.sleep(100); } catch (Exception e) { e.printStackTrace(); } try { refreshGridViewLocker.lock(); newSqliteAlarmList = AlarmManager.findAlarmList(); if (newSqliteAlarmList != null) { final Map> sqliteAlarmListMap = new HashMap<>(); sqliteAlarmListLock.lock(); for (Map alarm : sqliteAlarmList) { sqliteAlarmListMap.put(alarm.get("id"), alarm); } sqliteAlarmListLock.unlock(); for (Map alarm : newSqliteAlarmList) { //AlarmManager.putAlarmPlaying(alarm, false); Map backupAlarm = sqliteAlarmListMap.get(alarm.get("id")); if (backupAlarm != null) { if ("true".equals(backupAlarm.get("videoPlayFinished"))) { if (AlarmManager.getAlarmPlaying(alarm)) { //alarm.put("videoPlaying", backupAlarm.get("videoPlaying")); } } } } sqliteAlarmListLock.lock(); sqliteAlarmList.clear(); sqliteAlarmList.addAll(newSqliteAlarmList); sqliteAlarmListLock.unlock(); updateAlarmDataListInUIThread(); } } catch (Exception e) { e.printStackTrace(); } finally { refreshGridViewLocker.unlock(); } } @UiThread public void updateAlarmDataListInUIThread() { alarmListAdapter.notifyDataSetChanged(); } /** * Hides a spinner's drop down. */ public static void hideSpinnerDropDown(Spinner spinner) { try { Method method = Spinner.class.getDeclaredMethod("onDetachedFromWindow"); method.setAccessible(true); method.invoke(spinner); } catch (Exception e) { e.printStackTrace(); } } @AfterViews public void afterViews() { try { for (HomeGridViewAdapter.AlarmListAdapter.ViewHolder viewHolder : viewHolderSet.keySet()) { hideSpinnerDropDown(viewHolder.matchPersonList); } } catch (Exception e) { e.printStackTrace(); } alarmListAdapter = new AlarmListAdapter(); alarmListGridView.setAdapter(alarmListAdapter); alarmListGridView.setOnScrollListener( new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { sqliteAlarmListLock.lock(); for (Map sqliteAlarm : sqliteAlarmList) { AlarmManager.putAlarmPlaying(sqliteAlarm, false); } sqliteAlarmListLock.unlock(); try{ for (HomeGridViewAdapter.AlarmListAdapter.ViewHolder viewHolder : viewHolderSet.keySet()) { viewHolder.alarmVideoOverlay.setVisibility(View.GONE); } } catch (Exception e) { e.printStackTrace(); } stopAllVideoPlays(null); int showGotoTop = View.INVISIBLE; if (alarmListGridView.getChildCount() > 0) { if (alarmListGridView.getChildAt(0).getTop() != 0) { showGotoTop = View.VISIBLE; } } goto_top.setVisibility(showGotoTop); } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {} }); saveVideoPlayerCurrentTime(); // executorService.execute(new Runnable() { // @Override // public void run() { // while (true) { // try { // AlarmManager.updateVideoUrl(); // SystemClock.sleep(1 * 1000); // } catch (Exception e) { //// e.printStackTrace(); // System.out.println("HomeFragment.run " + e.getMessage()); // } // } // } // }); executorService.execute(new Runnable() { @Override public void run() { while (true) { try { MemoryUtil.monitorMemory(); sendKeepLife(); ThreadUtil.threadCreateObserver(); SystemClock.sleep(3 * 1000); } catch (Exception e) { e.printStackTrace(); } } } }); } public static void sendKeepLife() { try { if (System.currentTimeMillis() - lastSendKeepLife > 2 * 1000) { Intent intent = new Intent("keepLife"); intent.putExtra("message", "This is my message!"); BaseApplication.getApplication().activity.sendBroadcast(intent); lastSendKeepLife = System.currentTimeMillis(); } } catch (Exception e) { e.printStackTrace(); } } static long lastSendKeepLife = 0; public ExecutorService executorService = Executors.newCachedThreadPool(); @Click public void goto_top() { alarmListGridView.smoothScrollToPositionFromTop(0,0); goto_top.setVisibility(View.INVISIBLE); } }