package com.mobmonkey.mobmonkeyandroid.fragments;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.mobmonkey.mobmonkeyandroid.R;
import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMInboxArrayAdapter;
import com.mobmonkey.mobmonkeyandroid.arrayadaptersitems.MMInboxItem;
import com.mobmonkey.mobmonkeyandroid.listeners.*;
import com.mobmonkey.mobmonkeyandroid.utils.MMConstants;
import com.mobmonkey.mobmonkeyandroid.utils.MMFragment;
import com.mobmonkey.mobmonkeysdk.adapters.MMInboxAdapter;
import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants;
import com.mobmonkey.mobmonkeysdk.utils.MMCallback;
import com.mobmonkey.mobmonkeysdk.utils.MMLocationManager;
/**
* Android {@link Fragment} to display Inbox Fragment.
* @author Dezapp, LLC
*
*/
public class InboxFragment extends MMFragment implements OnItemClickListener {
private final String TAG = "InboxFragment: ";
private SharedPreferences userPrefs;
private ListView lvInbox;
private MMInboxItem[] inboxItems;
private MMInboxArrayAdapter arrayAdapter;
private MMOnInboxFragmentItemClickListener listener;
/*
* (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);
View view = inflater.inflate(R.layout.fragment_inbox_screen, container, false);
lvInbox = (ListView) view.findViewById(R.id.lvinbox);
createInbox();
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 MMOnInboxFragmentItemClickListener) {
listener = (MMOnInboxFragmentItemClickListener) activity;
}
}
/*
* (non-Javadoc)
* @see android.support.v4.app.Fragment#onResume()
*/
@Override
public void onResume() {
super.onResume();
if(MMLocationManager.isGPSEnabled() && MMLocationManager.getGPSLocation() != null) {
getInboxCounts();
}
}
/*
* (non-Javadoc)
* @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long)
*/
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
listener.onInboxFragmentItemClick(position);
}
/* (non-Javadoc)
* @see com.mobmonkey.mobmonkey.utils.MMFragment#onFragmentBackPressed()
*/
@Override
public void onFragmentBackPressed() {
}
/**
*
*/
private void createInbox() {
inboxItems = new MMInboxItem[getResources().getStringArray(R.array.inbox_category).length];
for(int i = 0; i < inboxItems.length; i++) {
inboxItems[i] = new MMInboxItem();
inboxItems[i].title = getResources().getStringArray(R.array.inbox_category)[i];
inboxItems[i].counter = MMSDKConstants.DEFAULT_INT_ZERO;
}
arrayAdapter = new MMInboxArrayAdapter(getActivity(), R.layout.listview_row_inbox, inboxItems);
lvInbox.setAdapter(arrayAdapter);
lvInbox.setOnItemClickListener(InboxFragment.this);
}
/**
* Update Inbox {@link ListView} when first started or resume.
*/
private void getInboxCounts() {
MMInboxAdapter.getCounts(new InboxCountsCallback());
}
/**
*
* @param jObj
* @throws JSONException
*/
private void setInboxCounts(JSONObject jObj) throws JSONException {
int openrequests = jObj.getInt(MMSDKConstants.JSON_KEY_OPEN_REQUESTS_COUNT);
int assignedReadCount = jObj.getInt(MMSDKConstants.JSON_KEY_ASSIGNED_READ_REQUESTS);
int assignedUnreadCount = jObj.getInt(MMSDKConstants.JSON_KEY_ASSIGNED_UNREAD_REQUESTS);
int fulfilledReadCount = jObj.getInt(MMSDKConstants.JSON_KEY_FULFILLED_READ_COUNT);
int fulfilledUnreadCount = jObj.getInt(MMSDKConstants.JSON_KEY_FULFILLED_UNREAD_COUNT);
int openRequestCount = openrequests;
int answeredRequestsCount = fulfilledReadCount + fulfilledUnreadCount;
int assignedRequestsCount = assignedReadCount + assignedUnreadCount;
if(openRequestCount > 0) {
inboxItems[0].counter = openRequestCount;
inboxItems[0].containCounter = openRequestCount;
} else {
inboxItems[0].counter = MMSDKConstants.DEFAULT_INT_ZERO;
inboxItems[0].containCounter = MMSDKConstants.DEFAULT_INT_ZERO;
}
arrayAdapter.isEnabled(0);
if(answeredRequestsCount > 0) {
inboxItems[1].counter = fulfilledUnreadCount;
inboxItems[1].containCounter = answeredRequestsCount;
} else {
inboxItems[1].counter = MMSDKConstants.DEFAULT_INT_ZERO;
inboxItems[1].containCounter = MMSDKConstants.DEFAULT_INT_ZERO;
}
arrayAdapter.isEnabled(1);
if(assignedRequestsCount > 0) {
inboxItems[2].counter = assignedUnreadCount;
inboxItems[2].containCounter = assignedRequestsCount;
} else {
inboxItems[2].counter = MMSDKConstants.DEFAULT_INT_ZERO;
inboxItems[2].containCounter = MMSDKConstants.DEFAULT_INT_ZERO;
}
arrayAdapter.isEnabled(2);
arrayAdapter.notifyDataSetChanged();
}
/**
*
* @author Dezapp, LLC
*
*/
private class InboxCountsCallback implements MMCallback {
@Override
public void processCallback(Object obj) {
if(obj != null) {
Log.d(TAG, "inbox: " + (String) obj);
if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) {
Toast.makeText(getActivity(), getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show();
} else {
try {
setInboxCounts(new JSONObject((String) obj));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
}