package com.mobmonkey.mobmonkeyandroid.fragments;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.ListView;
import com.mobmonkey.mobmonkeyandroid.R;
import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMHistoryArrayAdapter;
import com.mobmonkey.mobmonkeyandroid.arrayadaptersitems.MMSearchResultsItem;
import com.mobmonkey.mobmonkeyandroid.listeners.MMOnSearchResultsFragmentItemClickListener;
import com.mobmonkey.mobmonkeyandroid.utils.*;
import com.mobmonkey.mobmonkeysdk.utils.*;
/**
* @author Dezapp, LLC
*
*/
public class HistoryFragment extends MMFragment implements OnClickListener,
OnItemClickListener,
OnItemLongClickListener {
private static final String TAG = "HistoryFragment: ";
private SharedPreferences userPrefs;
private SharedPreferences.Editor userPrefsEditor;
private String user;
private JSONArray history;
private ArrayList<JSONObject> historyLocations;
private MMExpandedListView elvHistory;
private ArrayAdapter<JSONObject> arrayAdapter;
private MMOnSearchResultsFragmentItemClickListener searchResultsLocationSelectListener;
/*
* (non-Javadoc)
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
userPrefs = getActivity().getSharedPreferences(MMSDKConstants.USER_PREFS, Context.MODE_PRIVATE);
userPrefsEditor = userPrefs.edit();
View view = inflater.inflate(R.layout.fragment_history_screen, container, false);
Button btnClear = (Button) view.findViewById(R.id.btnclear);
elvHistory = (MMExpandedListView) view.findViewById(R.id.elvhistory);
try {
user = userPrefs.getString(MMSDKConstants.KEY_USER, MMSDKConstants.DEFAULT_STRING_EMPTY);
if(!userPrefs.getString(user + MMSDKConstants.SHARED_PREFS_KEY_HISTORY, MMSDKConstants.DEFAULT_STRING_EMPTY).equals(MMSDKConstants.DEFAULT_STRING_EMPTY)) {
history = new JSONArray(userPrefs.getString(user + MMSDKConstants.SHARED_PREFS_KEY_HISTORY, MMSDKConstants.DEFAULT_STRING_EMPTY));
if(history.length() > 0) {
getHistoryLocations();
btnClear.setOnClickListener(HistoryFragment.this);
elvHistory.setOnItemClickListener(HistoryFragment.this);
elvHistory.setOnItemLongClickListener(HistoryFragment.this);
} else {
history = new JSONArray();
displayNoHistoryAlert();
}
} else {
history = new JSONArray();
displayNoHistoryAlert();
}
} catch (JSONException e) {
e.printStackTrace();
}
return view;
}
/*
* (non-Javadoc)
* @see android.support.v4.app.Fragment#onAttach(android.app.Activity)
*/
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if(activity instanceof MMOnSearchResultsFragmentItemClickListener) {
searchResultsLocationSelectListener = (MMOnSearchResultsFragmentItemClickListener) activity;
}
}
/*
* (non-Javadoc)
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.btnclear:
promptClearHistory();
break;
}
}
/*
* (non-Javadoc)
* @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long)
*/
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
searchResultsLocationSelectListener.onSearchResultsFragmentItemClick(arrayAdapter.getItem(position).toString());
}
/* (non-Javadoc)
* @see android.widget.AdapterView.OnItemLongClickListener#onItemLongClick(android.widget.AdapterView, android.view.View, int, long)
*/
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
try {
promptRemoveLocationFromHistory(arrayAdapter.getItem(position));
return true;
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
/* (non-Javadoc)
* @see com.mobmonkey.mobmonkeyandroid.utils.MMFragment#onFragmentBackPressed()
*/
@Override
public void onFragmentBackPressed() {
userPrefsEditor.putString(user + MMSDKConstants.SHARED_PREFS_KEY_HISTORY, history.toString());
userPrefsEditor.commit();
}
/**
*
* @throws JSONException
*/
private void getHistoryLocations() throws JSONException {
historyLocations = new ArrayList<JSONObject>();
for(int i = 0; i < history.length(); i++) {
historyLocations.add(history.getJSONObject(i));
}
arrayAdapter = new MMHistoryArrayAdapter(getActivity(), R.layout.listview_row_history, historyLocations);
elvHistory.setAdapter(arrayAdapter);
}
/**
*
*/
private void displayNoHistoryAlert() {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.ad_title_no_history)
.setMessage(R.string.ad_message_no_history)
.setCancelable(false)
.setNeutralButton(R.string.ad_btn_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getActivity().onBackPressed();
}
})
.show();
}
/**
*
*/
private void promptClearHistory() {
if(historyLocations.size() > 0) {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.ad_title_clear_history)
.setMessage(R.string.ad_message_clear_history)
.setCancelable(false)
.setPositiveButton(R.string.ad_btn_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
clearHistory();
}
})
.setNegativeButton(R.string.ad_btn_no, null)
.show();
} else {
displayNoHistoryAlert();
}
}
/**
*
* @param loc
* @throws JSONException
*/
private void promptRemoveLocationFromHistory(final JSONObject loc) throws JSONException {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.ad_title_remove_history)
.setMessage(getString(R.string.ad_message_remove) + loc.getString(MMSDKConstants.JSON_KEY_NAME) + getString(R.string.ad_message_from_history))
.setCancelable(false)
.setPositiveButton(R.string.ad_btn_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
removeFromHistory(loc);
}
})
.setNegativeButton(R.string.ad_btn_no, null)
.show();
}
/**
*
*/
private void clearHistory() {
historyLocations.removeAll(historyLocations);
history = new JSONArray(historyLocations);
arrayAdapter.notifyDataSetChanged();
displayNoHistoryAlert();
}
private void removeFromHistory(JSONObject loc) {
historyLocations.remove(loc);
history = new JSONArray(historyLocations);
arrayAdapter.notifyDataSetChanged();
if(history.length() < 1) {
displayNoHistoryAlert();
}
}
}