package com.V4Creations.vtulife.view.fragments;
import java.util.ArrayList;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.AutoCompleteTextView;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import com.V4Creations.vtulife.R;
import com.V4Creations.vtulife.controller.adapters.ResultAdapter;
import com.V4Creations.vtulife.controller.adapters.UsnHistoryArrayAdapter;
import com.V4Creations.vtulife.controller.adapters.VTULifeFragmentAdapter.FragmentInfo;
import com.V4Creations.vtulife.controller.db.VTULifeDataBase;
import com.V4Creations.vtulife.controller.server.ClassResultLoaderManager;
import com.V4Creations.vtulife.model.ActionBarStatus;
import com.V4Creations.vtulife.model.ResultItem;
import com.V4Creations.vtulife.model.interfaces.ClassResultLoaderInterface;
import com.V4Creations.vtulife.model.interfaces.RefreshListener;
import com.V4Creations.vtulife.util.GoogleAnalyticsManager;
import com.V4Creations.vtulife.view.activity.VTULifeMainActivity;
import com.google.analytics.tracking.android.EasyTracker;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class ClassResultListFragment extends ListFragment implements
ClassResultLoaderInterface, FragmentInfo, RefreshListener,
OnClickListener, OnEditorActionListener {
String TAG = "ClassResultListFragment";
private CheckBox revalCheckBox;
private AutoCompleteTextView classUsnAutoCompleteTextView;
private ImageButton classSubmitImageButton;
private UsnHistoryArrayAdapter mClassUsnHistoryAdapter;
private VTULifeMainActivity activity;
private ResultAdapter mAdapter;
private ActionBarStatus mActionBarStatus;
private EasyTracker mEasyTracker;
private ClassResultLoaderManager mClassResultLoaderManager;
private boolean isClassUsnSaved = false;
private final String classUsnRegx = "[1-4][a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z][a-zA-Z][a-zA-Z]{0,1}";
public ClassResultListFragment() {
mActionBarStatus = new ActionBarStatus();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
activity = (VTULifeMainActivity) getActivity();
return inflater.inflate(R.layout.fragment_class_result, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mEasyTracker = GoogleAnalyticsManager
.getGoogleAnalyticsTracker(activity);
initView();
}
private void initView() {
initListAdapter();
classSubmitImageButton = (ImageButton) getView().findViewById(
R.id.classSubmitImageButton);
initAutoCompleteTextView();
initActionBarCustomView();
initListener();
}
private void initActionBarCustomView() {
mActionBarStatus.customView = LayoutInflater.from(activity).inflate(
R.layout.check_box_layout, null);
revalCheckBox = (CheckBox) mActionBarStatus.customView
.findViewById(R.id.revalCheckBox);
mActionBarStatus.isCustomViewOnActionBarEnabled = true;
callActionBarReflect();
}
private void initAutoCompleteTextView() {
classUsnAutoCompleteTextView = (AutoCompleteTextView) getView()
.findViewById(R.id.classUsnAutoCompleteTextView);
mClassUsnHistoryAdapter = new UsnHistoryArrayAdapter(activity);
classUsnAutoCompleteTextView.setAdapter(mClassUsnHistoryAdapter);
mClassUsnHistoryAdapter.reloadHistory(true);
classUsnAutoCompleteTextView.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.toString().length() >= 7
&& !s.toString().matches(classUsnRegx))
showInvalodUsn();
else
classUsnAutoCompleteTextView.setError(null);
}
});
}
private void initListAdapter() {
mAdapter = new ResultAdapter(activity);
setListAdapter(mAdapter);
}
private void initListener() {
classSubmitImageButton.setOnClickListener(this);
classUsnAutoCompleteTextView.setOnEditorActionListener(this);
}
protected void manageResultFetch() {
String classUsn = classUsnAutoCompleteTextView.getText().toString();
if (classUsn.matches(classUsnRegx))
if (mClassResultLoaderManager != null
&& mClassResultLoaderManager.isLoading())
cancel();
else
getResult(classUsn);
else
showInvalodUsn();
}
private void showInvalodUsn() {
classUsnAutoCompleteTextView
.setError(getString(R.string.invalid_class_usn));
}
private void cancel() {
Crouton.clearCroutonsForActivity(activity);
mClassResultLoaderManager.cancel();
}
protected void getResult(String classUsn) {
mClassResultLoaderManager = new ClassResultLoaderManager(activity,
this, classUsn, revalCheckBox.isChecked());
isClassUsnSaved = false;
}
private void stopLoading() {
mClassResultLoaderManager = null;
classSubmitImageButton.setImageResource(R.drawable.ic_action_send_now);
classUsnAutoCompleteTextView.setEnabled(true);
mActionBarStatus.subTitle = null;
mActionBarStatus.isInterminatePorogressBarVisible = false;
revalCheckBox.setEnabled(true);
callActionBarReflect();
}
protected void saveAndRefreshUsnHistory() {
GoogleAnalyticsManager.infomGoogleAnalytics(mEasyTracker,
GoogleAnalyticsManager.CATEGORY_RESULT,
GoogleAnalyticsManager.ACTION_CLASS_RESULT,
mClassResultLoaderManager.getClassUsn(), 0L);
VTULifeDataBase.setClassUSNHistory(activity,
mClassResultLoaderManager.getClassUsn());
mClassUsnHistoryAdapter.reloadHistory(true);
}
@Override
public String getTitle(Context context) {
return ClassResultListFragment.getFeatureName(context);
}
@Override
public ActionBarStatus getActionBarStatus() {
return mActionBarStatus;
}
@Override
public void refresh() {
if (mClassUsnHistoryAdapter != null)
mClassUsnHistoryAdapter.reloadHistory(true);
}
public static String getFeatureName(Context context) {
return context.getString(R.string.class_result);
}
@Override
public void onStartLoading() {
mAdapter.clear();
classSubmitImageButton.setImageResource(R.drawable.ic_action_cancel);
classUsnAutoCompleteTextView.setEnabled(false);
mActionBarStatus.subTitle = getString(R.string.loading);
mActionBarStatus.isInterminatePorogressBarVisible = true;
revalCheckBox.setEnabled(false);
callActionBarReflect();
}
@Override
public void onLoadingSuccess(ArrayList<ResultItem> resultItems, String usn) {
mAdapter.supportAddAll(resultItems);
if (!isClassUsnSaved) {
saveAndRefreshUsnHistory();
isClassUsnSaved = true;
}
}
@Override
public void onLoadingFailure(String message, String trackMessage,
int statusCode, String usn) {
activity.showCrouton(message + "(" + usn + ")", Style.ALERT, false);
if (!trackMessage.equals(""))
GoogleAnalyticsManager.infomGoogleAnalytics(mEasyTracker,
GoogleAnalyticsManager.CATEGORY_RESULT,
GoogleAnalyticsManager.ACTION_NETWORK_ERROR, trackMessage
+ "-" + statusCode, 0L);
}
@Override
public void onClick(View v) {
manageResultFetch();
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER))
|| (actionId == EditorInfo.IME_ACTION_DONE))
manageResultFetch();
return false;
}
private void callActionBarReflect() {
activity.reflectActionBarChange(mActionBarStatus,
VTULifeMainActivity.ID_CLASS_RESULT_FRAGMENT, true);
}
@Override
public void onFinishLoading() {
String message = getString(R.string.finished);
if (mClassResultLoaderManager.isCancelled())
message = getString(R.string.cancelled);
activity.showCrouton(
message + " ("
+ mClassResultLoaderManager.getTotatlSuccessResult()
+ " " + getString(R.string.results) + ").", Style.INFO,
false);
stopLoading();
}
}