package de.saxsys.android.projectiler.app.ui.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.RelativeLayout;
import android.widget.TextView;
import org.droidparts.annotation.inject.InjectView;
import org.droidparts.concurrent.task.AsyncTaskResultListener;
import org.droidparts.fragment.support.v4.Fragment;
import java.util.Date;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
import de.saxsys.android.projectiler.app.MainActivity;
import de.saxsys.android.projectiler.app.R;
import de.saxsys.android.projectiler.app.asynctasks.StartAsyncTask;
import de.saxsys.android.projectiler.app.dialog.CommentDialog;
import de.saxsys.android.projectiler.app.utils.BusinessProcess;
import de.saxsys.android.projectiler.app.utils.WidgetUtils;
/**
* Created by spaxx86 on 21.05.2014.
*/
public class TimeTrackingFragment extends Fragment implements View.OnClickListener {
/**
* The fragment argument representing the section number for this
* fragment.
*/
private static final String ARG_PROJECT_NAME = "project_name";
private static final String ARG_START_VISIBLE = "start_visible";
private static final String ARG_STOP_VISIBLE = "stop_visible";
private String projectName;
private boolean startVisible;
private boolean stopVisible;
private boolean isLoading;
private BusinessProcess businessProcess;
private View rootView;
@InjectView(id = R.id.rl_container)
private RelativeLayout rlContainer;
@InjectView(id = R.id.rl_container_not_started)
private RelativeLayout rlContainerNotStarted;
@InjectView(id = R.id.tvProjectName)
private TextView tvProject;
@InjectView(id = R.id.rl_container_other_project_selected)
private RelativeLayout rlOtherProject;
@InjectView(id = R.id.chronometer)
private Chronometer chronometer;
@InjectView(id = R.id.tvOtherProjectSelected)
private TextView tvOtherProjectSelected;
@InjectView(id = R.id.btnStart, click = true)
private Button btnStart;
@InjectView(id = R.id.btnStop, click = true)
private Button btnStop;
@InjectView(id = R.id.btnReset, click = true)
private Button btnReset;
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static Fragment newInstance(String projectName, boolean startVisible, boolean stopVisible) {
TimeTrackingFragment fragment = new TimeTrackingFragment();
Bundle args = new Bundle();
args.putString(ARG_PROJECT_NAME, projectName);
args.putBoolean(ARG_START_VISIBLE, startVisible);
args.putBoolean(ARG_STOP_VISIBLE, stopVisible);
fragment.setArguments(args);
return fragment;
}
public TimeTrackingFragment() {
}
@Override
public View onCreateView(Bundle savedInstanceState, LayoutInflater inflater, ViewGroup container) {
rootView = inflater.inflate(R.layout.fragment_main, container, false);
businessProcess = BusinessProcess.getInstance(getActivity().getApplicationContext());
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
businessProcess = BusinessProcess.getInstance(getActivity().getApplicationContext());
projectName = getArguments().getString(ARG_PROJECT_NAME);
startVisible = getArguments().getBoolean(ARG_START_VISIBLE);
stopVisible = getArguments().getBoolean(ARG_STOP_VISIBLE);
initView();
}
private void setStartDateTextView(Date date) {
if (date == null) {
chronometer.setVisibility(View.INVISIBLE);
} else {
if (businessProcess.getProjectName().equals(projectName)) {
chronometer.setVisibility(View.VISIBLE);
long currentDatetime = System.currentTimeMillis();
chronometer.setBase(SystemClock.elapsedRealtime() - (currentDatetime - date.getTime()));
chronometer.start();
} else {
chronometer.setVisibility(View.INVISIBLE);
}
}
}
@Override
public void onResume() {
super.onResume();
Log.i("Fragment", "onResume");
if (rootView != null) {
String currentProjectName = businessProcess.getProjectName();
if (currentProjectName.equals("")) {
startVisible = true;
stopVisible = false;
} else if (currentProjectName.equals(projectName) && businessProcess.getStartDate() != null) {
startVisible = false;
stopVisible = true;
} else {
startVisible = true;
stopVisible = false;
}
if (!isLoading) {
initView();
}
}
}
private void initView() {
if (projectName.equals("")) {
tvProject.setVisibility(View.GONE);
rlContainer.setVisibility(View.GONE);
rlContainerNotStarted.setVisibility(View.VISIBLE);
rlOtherProject.setVisibility(View.GONE);
chronometer.setVisibility(View.INVISIBLE);
} else if (businessProcess.getStartDate() != null && !businessProcess.getProjectName().equals(projectName)) {
// ein anderes Projekt wurde schon gestartet
rlContainer.setVisibility(View.GONE);
rlContainerNotStarted.setVisibility(View.GONE);
tvProject.setVisibility(View.GONE);
chronometer.setVisibility(View.INVISIBLE);
tvOtherProjectSelected = (TextView) rootView.findViewById(R.id.tvOtherProjectSelected);
String text = String.format(getString(R.string.other_project_booked), businessProcess.getProjectName());
tvOtherProjectSelected.setText(text);
rlOtherProject.setVisibility(View.VISIBLE);
} else {
tvProject.setText(projectName);
rlContainer.setVisibility(View.VISIBLE);
rlContainerNotStarted.setVisibility(View.GONE);
rlOtherProject.setVisibility(View.GONE);
if (startVisible) {
btnStart.setVisibility(View.VISIBLE);
} else {
btnStart.setVisibility(View.GONE);
}
if (stopVisible) {
btnStop.setVisibility(View.VISIBLE);
btnReset.setVisibility(View.VISIBLE);
} else {
btnStop.setVisibility(View.GONE);
btnReset.setVisibility(View.GONE);
}
// ist ein startDate gesetzt?
setStartDateTextView(businessProcess.getStartDate());
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity) activity).onSectionAttached(
getArguments().getString(ARG_PROJECT_NAME));
}
@Override
public void onClick(View view) {
if (view == btnStart) {
getActivity().setProgressBarIndeterminateVisibility(true);
businessProcess.saveProjectName(getActivity().getApplicationContext(), projectName);
new StartAsyncTask(getActivity().getApplicationContext(), startTaskResultListener).execute();
} else if (view == btnStop) {
btnStop.setEnabled(false);
btnReset.setEnabled(false);
CommentDialog dialog = new CommentDialog(stopTaskResultListener, backPressListener, projectName);
dialog.show(getActivity().getFragmentManager(), "CommentDialog");
} else if (view == btnReset) {
businessProcess.resetProject(getActivity().getApplicationContext(), true);
btnReset.setVisibility(View.GONE);
btnStart.setVisibility(View.VISIBLE);
btnStop.setVisibility(View.GONE);
setStartDateTextView(null);
((MainActivity) getActivity()).refreshNavigationDrawer("");
}
}
private CommentDialog.OnBackPressListener backPressListener = new CommentDialog.OnBackPressListener() {
@Override
public void onBackPress() {
btnStop.setEnabled(true);
btnReset.setEnabled(true);
}
};
private AsyncTaskResultListener<Date> startTaskResultListener = new AsyncTaskResultListener<Date>() {
@Override
public void onAsyncTaskSuccess(Date aDate) {
getActivity().setProgressBarIndeterminateVisibility(false);
// navigation Drawer aktualisieren
((MainActivity) getActivity()).refreshNavigationDrawer(projectName);
btnReset.setVisibility(View.VISIBLE);
btnStart.setVisibility(View.GONE);
btnStop.setVisibility(View.VISIBLE);
setStartDateTextView(aDate);
WidgetUtils.refreshWidget(getActivity().getApplicationContext());
}
@Override
public void onAsyncTaskFailure(Exception e) {
}
};
private AsyncTaskResultListener<String> stopTaskResultListener = new AsyncTaskResultListener<String>() {
@Override
public void onAsyncTaskSuccess(String projectName) {
getActivity().setProgressBarIndeterminateVisibility(false);
businessProcess.resetStartTime();
((MainActivity) getActivity()).refreshNavigationDrawer("");
btnReset.setVisibility(View.GONE);
btnStart.setVisibility(View.VISIBLE);
btnStop.setVisibility(View.GONE);
setStartDateTextView(null);
WidgetUtils.refreshWidget(getActivity().getApplicationContext());
Crouton.makeText(getActivity(), getString(R.string.time_booked_successfull), Style.INFO).show();
btnStop.setEnabled(true);
btnReset.setEnabled(true);
}
@Override
public void onAsyncTaskFailure(Exception e) {
getActivity().setProgressBarIndeterminateVisibility(false);
if (e instanceof IllegalStateException) {
Crouton.makeText(getActivity(), e.getMessage(), Style.ALERT).show();
} else {
businessProcess.resetStartTime();
((MainActivity) getActivity()).refreshNavigationDrawer("");
btnReset.setVisibility(View.GONE);
btnStart.setVisibility(View.VISIBLE);
btnStop.setVisibility(View.GONE);
setStartDateTextView(null);
WidgetUtils.refreshWidget(getActivity().getApplicationContext());
Crouton.makeText(getActivity(), getString(R.string.time_booked_not_successfull), Style.ALERT).show();
getActivity().supportInvalidateOptionsMenu();
}
btnStop.setEnabled(true);
btnReset.setEnabled(true);
}
};
}