package com.basic.security.fragment; import android.os.SystemClock; import android.widget.TextView; import com.basic.security.count.R; import com.basic.security.activity.MainActivity; import com.basic.security.base.BaseApplication; import com.basic.security.base.BaseFragment; import com.basic.security.manager.ClearBeginManager; import com.basic.security.manager.HomeManager; import com.basic.security.manager.RealTimeMetricsManager; 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 org.androidannotations.annotations.ViewById; import java.text.SimpleDateFormat; import java.util.Date; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import com.basic.security.manager.TodayBeginManager; import com.basic.security.widget.SuitLines; import com.basic.security.utils.Unit; @EFragment(R.layout.fragment_home) public class HomeFragment extends BaseFragment { @ViewById public TextView todayEnters; @ViewById public TextView todayExits; @ViewById public TextView todayRemaining; @ViewById public TextView entersSinceLastClear; @ViewById public TextView exitsSinceLastClear; @ViewById public SuitLines suitLines; int peopleCount = 1; int peopleCountAdd = 100; @Override public void show() { refresh(); } @AfterViews public void afterViews() { initDataForLines(); } @Background public void initDataForLinesInterval() { while (true) { if (System.currentTimeMillis() - initDataForLinesLockUpdateTime > 60*1000) { ClearBeginManager.initClearBegin(); ClearBeginManager.reset(); TodayBeginManager.initTodayBegin(); ((MainActivity) BaseApplication.getApplication().activity).fragment_home.refresh(); } SystemClock.sleep(20*1000); } } Lock initDataForLinesLock = new ReentrantLock(); long initDataForLinesLockUpdateTime = System.currentTimeMillis(); @Background public void initDataForLines() { initDataForLinesLock.lock(); initDataForLinesLockUpdateTime = System.currentTimeMillis(); List lines = new ArrayList<>(); int currentHour = new Date().getHours(); Date dateStartHour7 = new Date(); dateStartHour7.setHours(7); dateStartHour7.setMinutes(0); dateStartHour7.setSeconds(0); boolean lastAdd = false; for (int i = 7; i <= 19; i++) { dateStartHour7.setHours(i); dateStartHour7.setMinutes(0); for (int j = 0; j <= 60; j=j+5) { if (j == 60) { break; } dateStartHour7.setHours(i); dateStartHour7.setMinutes(j); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); String hourStr = sdf.format(dateStartHour7); if (System.currentTimeMillis() < dateStartHour7.getTime()) { if (!lastAdd) { lastAdd = true; peopleCount = peopleCount + peopleCountAdd; Date currentDate = new Date(); int remaining = Integer.parseInt(HomeManager.getTodayRemaining(currentDate)); lines.add(new Unit(remaining, sdf.format(currentDate))); } lines.add(new Unit(0, hourStr, false)); } else { peopleCount = peopleCount + peopleCountAdd; int remaining = Integer.parseInt(HomeManager.getTodayRemaining(dateStartHour7)); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); lines.add(new Unit(remaining, hourStr)); } } } refreshLines(lines); initDataForLinesLock.unlock(); } @UiThread public void refreshLines(List lines) { suitLines.feedWithAnim(lines); } @UiThread public void refresh() { initDataForLines(); peopleCount = 1; Random rand = new Random(); peopleCountAdd = rand.nextInt(50); if (peopleCountAdd == 0) { peopleCountAdd = 10; } todayEnters.setText(HomeManager.getTodayEnters()); todayExits.setText(HomeManager.getTodayExits()); todayRemaining.setText(HomeManager.getTodayRemaining()); entersSinceLastClear.setText(HomeManager.getEntersSinceLastClear()); exitsSinceLastClear.setText(HomeManager.getExitsSinceLastClear()); } @Click @Background public void clearBegin() { initDataForLines(); ClearBeginManager.saveClearBegin(RealTimeMetricsManager.getLastRealTimeMetrics()); refresh(); } }