package com.basic.security.fragment; 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.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.SocketClient; 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.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @EFragment(R.layout.fragment_home) public class HomeFragment extends HomePlayAlarmVideo { 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"); // } } @Background public void pullAlarmDataList() { SystemClock.sleep(1000); refreshGridView(); while (true) { try{ Map requestBody = new HashMap(); requestBody.put("sec", "15"); List> newRemoteAlarmList = null; try { if (localServer) { newRemoteAlarmList = (List>)homeRestClient.list1(); } else { SocketClient socketClient = new SocketClient(SettingManager.getIpStr(), SettingManager.getPort()); socketClient.start(); break; } } catch (Exception e) { System.out.println("pullAlarmDataList, " + e.getMessage()); } } catch (Exception e) { e.printStackTrace(); } finally { SystemClock.sleep(8000); } } } @Override public void show() { for (AlarmListAdapter.ViewHolder viewHolder : viewHolderSet.keySet()) { if ("true".equals(viewHolder.alarm.get("videoPlaying"))) { viewHolder.alarm.put("videoPlaying", "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(); } 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) { alarm.put("videoPlaying", "false"); Map backupAlarm = sqliteAlarmListMap.get(alarm.get("id")); if (backupAlarm != null) { if (!"true".equals(backupAlarm.get("videoPlayFinished"))) { if ("true".equals(backupAlarm.get("videoPlaying"))) { alarm.put("videoPlaying", backupAlarm.get("videoPlaying")); } } } } sqliteAlarmListLock.lock(); sqliteAlarmList.clear(); sqliteAlarmList.addAll(newSqliteAlarmList); sqliteAlarmListLock.unlock(); updateAlarmDataListInUIThread(); } 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) { sqliteAlarm.put("videoPlaying", "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(); } @Click public void goto_top() { alarmListGridView.smoothScrollToPositionFromTop(0,0); goto_top.setVisibility(View.INVISIBLE); } }