package de.saxsys.android.projectiler.app;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.todddavies.components.progressbar.ProgressWheel;
import org.droidparts.activity.support.v7.ActionBarActivity;
import org.droidparts.annotation.inject.InjectView;
import org.droidparts.concurrent.task.AsyncTaskResultListener;
import java.util.Date;
import java.util.List;
import de.saxsys.android.projectiler.app.asynctasks.GetProjectsAsyncTask;
import de.saxsys.android.projectiler.app.asynctasks.StartAsyncTask;
import de.saxsys.android.projectiler.app.dialog.CommentDialog;
import de.saxsys.android.projectiler.app.ui.adapter.ProjectListAdapter;
import de.saxsys.android.projectiler.app.utils.BusinessProcess;
import de.saxsys.android.projectiler.app.utils.NotificationUtils;
import de.saxsys.android.projectiler.app.utils.WidgetUtils;
public class NfcActivity extends ActionBarActivity {
private final String TAG = NfcActivity.class.getSimpleName();
@InjectView(id = R.id.progressBar)
private ProgressWheel progressBar;
@InjectView(id = R.id.lvProjects)
private PullToRefreshListView lvProjects;
private BusinessProcess businessProcess;
@Override
public void onPreInject() {
setContentView(R.layout.activity_nfc);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
businessProcess = BusinessProcess.getInstance(getApplicationContext());
if (!businessProcess.getAutoLogin()) {
// Anzeige des Login
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(intent);
} else if (businessProcess.getStartDate() == null) {
// Projekteauswahl anzeigen
progressBar.setVisibility(View.VISIBLE);
progressBar.spin();
lvProjects.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
progressBar.setVisibility(View.VISIBLE);
progressBar.spin();
lvProjects.setVisibility(View.GONE);
new GetProjectsAsyncTask(getApplicationContext(), true, getProjectsListener).execute();
}
});
new GetProjectsAsyncTask(getApplicationContext(), false, getProjectsListener).execute();
} else {
progressBar.setVisibility(View.VISIBLE);
progressBar.spin();
lvProjects.setVisibility(View.GONE);
CommentDialog dialog = new CommentDialog(stopTaskListener, backPressListener, businessProcess.getProjectName());
dialog.show(getFragmentManager(), "CommentDialog");
}
}
private CommentDialog.OnBackPressListener backPressListener = new CommentDialog.OnBackPressListener() {
@Override
public void onBackPress() {
finish();
}
};
private AsyncTaskResultListener<Date> startListener = new AsyncTaskResultListener<Date>() {
@Override
public void onAsyncTaskSuccess(Date date) {
progressBar.setVisibility(View.GONE);
String startTime = businessProcess.getStartDateAsString();
String projectName = businessProcess.getProjectName();
NotificationUtils.sendNotification(getApplicationContext(), 001, getString(R.string.start_tracking), getString(R.string.start_tracking_project, startTime, projectName));
WidgetUtils.refreshWidget(getApplicationContext());
finish();
}
@Override
public void onAsyncTaskFailure(Exception e) {
Log.e(TAG, e.getMessage(), e);
}
};
private AsyncTaskResultListener<List<String>> getProjectsListener = new AsyncTaskResultListener<List<String>>() {
@Override
public void onAsyncTaskSuccess(List<String> itemList) {
lvProjects.setAdapter(new ProjectListAdapter(getApplicationContext(), itemList));
lvProjects.onRefreshComplete();
progressBar.setVisibility(View.GONE);
lvProjects.setVisibility(View.VISIBLE);
lvProjects.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int index, long l) {
String projectName = (String) adapterView.getItemAtPosition(index);
businessProcess.saveProjectName(getApplicationContext(), projectName);
new StartAsyncTask(getApplicationContext(), startListener).execute();
}
});
}
@Override
public void onAsyncTaskFailure(Exception e) {
Log.e(TAG, e.getMessage(), e);
finish();
}
};
private AsyncTaskResultListener<String> stopTaskListener = new AsyncTaskResultListener<String>() {
@Override
public void onAsyncTaskSuccess(String projectName) {
progressBar.setVisibility(View.GONE);
NotificationUtils.sendNotification(getApplicationContext(), 002, getString(R.string.stopped_time_tracking), getString(R.string.project_booked, projectName));
WidgetUtils.refreshWidget(getApplicationContext());
NfcActivity.this.finish();
}
@Override
public void onAsyncTaskFailure(Exception e) {
Log.e(TAG, e.getMessage(), e);
NotificationUtils.sendNotification(getApplicationContext(), 003, getString(R.string.error_stop_tracking), e.getMessage());
finish();
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.nfc, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}