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<Map<String, String>> 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<String, String> requestBody = new HashMap<String, String>();
|
requestBody.put("sec", "15");
|
List<Map<String, String>> newRemoteAlarmList = null;
|
try {
|
if (localServer) {
|
newRemoteAlarmList = (List<Map<String, String>>)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<String, Map<String, String>> sqliteAlarmListMap = new HashMap<>();
|
sqliteAlarmListLock.lock();
|
for (Map<String, String> alarm : sqliteAlarmList) {
|
sqliteAlarmListMap.put(alarm.get("id"), alarm);
|
}
|
sqliteAlarmListLock.unlock();
|
for (Map<String, String> alarm : newSqliteAlarmList) {
|
alarm.put("videoPlaying", "false");
|
Map<String, String> 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<String, String> 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);
|
}
|
|
}
|