/woloc/src/main/java/org/richardsson/woloc/activity/MainActivityHandler.java
https://bitbucket.org/krichardsson/woloc · Java · 182 lines · 146 code · 36 blank · 0 comment · 3 complexity · 7916a1c89f12b37fcff454e422064ec8 MD5 · raw file
- package org.richardsson.woloc.activity;
- import android.app.Activity;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.view.MenuItem;
- import android.widget.Toast;
- import com.google.inject.Inject;
- import org.richardsson.woloc.*;
- import org.richardsson.woloc.android.wrapper.IntentWrapper;
- import org.richardsson.woloc.android.wrapper.Log;
- import org.richardsson.woloc.android.wrapper.TextViewWrapper;
- import org.richardsson.woloc.android.wrapper.UpdateTimer;
- import org.richardsson.woloc.export.RecordExporter;
- import org.richardsson.woloc.model.CurrentState;
- import org.richardsson.woloc.model.TimeRecord;
- import org.richardsson.woloc.persistence.CurrentStateQueryExtender;
- import org.richardsson.woloc.persistence.TimeDao;
- import org.richardsson.woloc.persistence.TimeRecordQuery;
- import org.richardsson.woloc.time.SystemTime;
- import org.richardsson.woloc.time.TimeUtil;
- import roboguice.inject.ContextSingleton;
- import java.io.IOException;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import java.util.List;
- @ContextSingleton
- public class MainActivityHandler implements RecordCleanerWarningDialog.Listener, UpdateTimer.Listener {
- private final Activity owner;
- private final IntentWrapper intentWrapper;
- private final RecordCleanerWarningDialog recordCleanerWarningDialog;
- private final TimeDao timeDao;
- private final TextViewWrapper textViewWrapper;
- private final UpdateTimer updateTimer;
- private final Log log;
- private final RecordExporter recordExporter;
- @Inject
- protected MainActivityHandler(Activity owner, IntentWrapper intentWrapper, RecordCleanerWarningDialog recordCleanerWarningDialog, TimeDao timeDao, TextViewWrapper textViewWrapper, UpdateTimer updateTimer, Log log, RecordExporter recordExporter) {
- this.owner = owner;
- this.intentWrapper = intentWrapper;
- this.recordCleanerWarningDialog = recordCleanerWarningDialog;
- this.timeDao = timeDao;
- this.textViewWrapper = textViewWrapper;
- this.updateTimer = updateTimer;
- this.log = log;
- this.recordExporter = recordExporter;
- }
- public void onCreate(Bundle savedInstanceState) {
- startService();
- }
- public void onResume() {
- startUpdateTimer();
- }
- public void onPause() {
- stopUpdateTimer();
- }
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_settings:
- goToSettings();
- return true;
- case R.id.menu_record_list:
- goToRecordList();
- return true;
- case R.id.menu_export_this_month:
- exportThisMonth();
- return true;
- case R.id.menu_export_previous_month:
- exportPreviousMonth();
- return true;
- case R.id.menu_clean_old_records:
- cleanOldRecordsWithWarning();
- return true;
- default:
- return false;
- }
- }
- public void onAccept() {
- cleanOldRecords();
- }
- public void updateTimerCallback() {
- updateGui();
- }
- private void updateGui() {
- log.i("Updating main GUI, using dao " + timeDao);
- final CurrentState currentState = timeDao.getCurrentState();
- final List<TimeRecord> records = timeDao.getRecords();
- updateStatusDisplay(currentState);
- updateWorkHoursDisplay(currentState, records);
- }
- private void startUpdateTimer() {
- updateTimer.start(this);
- }
- private void stopUpdateTimer() {
- updateTimer.stop();
- }
- private void exportThisMonth() {
- recordExporter.exportThisMonth();
- }
- private void exportPreviousMonth() {
- recordExporter.exportPreviousMonth();
- }
- private void goToSettings() {
- intentWrapper.startActivity(SettingsActivity.class);
- }
- private void goToRecordList() {
- intentWrapper.startActivity(RecordListActivity.class);
- }
- private void cleanOldRecordsWithWarning() {
- recordCleanerWarningDialog.showAndGetUserInput(this);
- }
- private void cleanOldRecords() {
- try {
- final List<TimeRecord> records = timeDao.getRecords();
- final TimeRecordQuery query = new TimeRecordQuery(records);
- final GregorianCalendar calendar = TimeUtil.createCalendar(SystemTime.now());
- calendar.add(Calendar.MONTH, -2);
- long twoMonthsAgo = calendar.getTime().getTime();
- final List<TimeRecord> oldRecords = query.olderThan(twoMonthsAgo);
- timeDao.removeRecords(oldRecords);
- } catch (IOException e) {
- Toast.makeText(owner, "Failed to write records to file.", Toast.LENGTH_SHORT).show();
- }
- }
- private void updateStatusDisplay(CurrentState currentState) {
- final boolean networkFound = currentState.isNetworkFound();
- final int id = R.id.status;
- if (networkFound) {
- textViewWrapper.setFromResource(id, R.string.punched_in, Color.GREEN);
- } else {
- textViewWrapper.setFromResource(id, R.string.punched_out, Color.RED);
- }
- }
- private void updateWorkHoursDisplay(CurrentState currentState, List<TimeRecord> records) {
- final TimeRecordQuery query = new TimeRecordQuery(records);
- final CurrentStateQueryExtender extender = new CurrentStateQueryExtender(query, currentState);
- setTextInView(extender.calculateTimeSummedToday(), R.id.working_hours_today);
- setTextInView(extender.calculateTimeSummedThisWeek(), R.id.working_hours_this_week);
- setTextInView(extender.calculateTimeSummedThisMonth(), R.id.working_hours_this_month);
- }
- private void setTextInView(long timeSpan, int id) {
- textViewWrapper.set(id, Formatter.formatTimeSpan(timeSpan));
- }
- private void startService() {
- intentWrapper.startService(WolocService.class);
- }
- }