package com.mobmonkey.mobmonkeyandroid.fragments; import java.text.ParseException; 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.graphics.Bitmap; import android.location.Location; import android.media.ThumbnailUtils; 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.ListView; import android.widget.Toast; import com.mobmonkey.mobmonkeyandroid.R; import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMAnsweredRequestsArrayAdapter; import com.mobmonkey.mobmonkeyandroid.arrayadaptersitems.MMAnsweredRequestItem; import com.mobmonkey.mobmonkeyandroid.arrayadaptersitems.MMMediaItem; import com.mobmonkey.mobmonkeyandroid.listeners.MMAcceptMediaOnClickListener; import com.mobmonkey.mobmonkeyandroid.listeners.MMImageOnClickListener; import com.mobmonkey.mobmonkeyandroid.listeners.MMLocationNameOnClickListener; import com.mobmonkey.mobmonkeyandroid.listeners.MMRejectMediaOnClickListener; import com.mobmonkey.mobmonkeyandroid.listeners.MMShareMediaOnClickListener; import com.mobmonkey.mobmonkeyandroid.listeners.MMVideoPlayOnClickListener; import com.mobmonkey.mobmonkeyandroid.listeners.OnLocationNameClickFragmentListener; import com.mobmonkey.mobmonkeyandroid.utils.MMConstants; import com.mobmonkey.mobmonkeyandroid.utils.MMExpandedListView; import com.mobmonkey.mobmonkeyandroid.utils.MMFragment; import com.mobmonkey.mobmonkeyandroid.utils.MMUtility; import com.mobmonkey.mobmonkeysdk.adapters.MMImageLoaderAdapter; import com.mobmonkey.mobmonkeysdk.adapters.MMRequestAdapter; import com.mobmonkey.mobmonkeysdk.utils.MMCallback; import com.mobmonkey.mobmonkeysdk.utils.MMLocationListener; import com.mobmonkey.mobmonkeysdk.utils.MMLocationManager; import com.mobmonkey.mobmonkeysdk.utils.MMProgressDialog; import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants; /** * Android {@link Fragment} to display Answered Requests. * @author Dezapp, LLC * */ public class AnsweredRequestsFragment extends MMFragment { private static final String TAG = "AnsweredRequestsFragment: "; private MMExpandedListView elvAnsweredRequests; private MMMediaItem[] answeredRequestItems; private SharedPreferences userPrefs; private MMAnsweredRequestsArrayAdapter answeredRequestsArrayAdapter; private OnLocationNameClickFragmentListener locationNameClickListener; /* * (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); MMRequestAdapter.getAnsweredRequests(new AnsweredRequestCallback()); View view = inflater.inflate(R.layout.fragment_answeredrequests_screen, container, false); elvAnsweredRequests = (MMExpandedListView) view.findViewById(R.id.elvansweredrequests); 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 OnLocationNameClickFragmentListener) { locationNameClickListener = (OnLocationNameClickFragmentListener) activity; } } /* * (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.utils.MMFragment#onFragmentBackPressed() */ @Override public void onFragmentBackPressed() { } /** * Function that generate an array of {@link MMAnsweredRequestItem}. * @throws JSONException * @throws NumberFormatException * @throws ParseException */ private void getAnsweredRequestItems(String result) throws JSONException, NumberFormatException, ParseException { JSONArray answeredRequests = new JSONArray(result); answeredRequestItems = new MMMediaItem[answeredRequests.length()]; for(int i = 0; i < answeredRequests.length(); i++) { JSONObject answeredRequest = answeredRequests.getJSONObject(i); MMMediaItem answeredRequestItem = new MMMediaItem(); if(answeredRequest.getJSONArray(MMSDKConstants.JSON_KEY_MEDIA).length() > 0) { JSONObject media = answeredRequest.getJSONArray(MMSDKConstants.JSON_KEY_MEDIA).getJSONObject(MMSDKConstants.DEFAULT_INT_ZERO); answeredRequestItem.setLocationName(answeredRequest.getString(MMSDKConstants.JSON_KEY_NAME_OF_LOCATION)); answeredRequestItem.setExpiryDate(MMUtility.getExpiryDate(System.currentTimeMillis() - answeredRequest.getLong(MMSDKConstants.JSON_KEY_FULFILLED_DATE))); int mediaType = answeredRequest.getInt(MMSDKConstants.JSON_KEY_MEDIA_TYPE); Log.d(TAG, TAG + "mediaType: " + mediaType); if(mediaType == MMSDKConstants.MEDIA_TYPE_IMAGE) { MMImageLoaderAdapter.loadImage(new LoadImageCallback(i), getActivity().getWindowManager().getDefaultDisplay(), media.getString(MMSDKConstants.JSON_KEY_MEDIA_URL)); answeredRequestItem.setIsImage(true); } else if(mediaType == MMSDKConstants.MEDIA_TYPE_VIDEO) { MMImageLoaderAdapter.loadImage(new LoadImageCallback(i), getActivity().getWindowManager().getDefaultDisplay(), media.getString(MMSDKConstants.JSON_KEY_THUMB_URL)); answeredRequestItem.setIsVideo(true); answeredRequestItem.setPlayOnClickListener(new MMVideoPlayOnClickListener(getActivity(), media.getString(MMSDKConstants.JSON_KEY_MEDIA_URL))); } answeredRequestItem.setAccepted(media.getBoolean(MMSDKConstants.JSON_KEY_ACCEPTED)); answeredRequestItem.setShareMediaOnClickListener(new MMShareMediaOnClickListener(getActivity())); answeredRequestItem.setLocationNameOnClickListener(new MMLocationNameOnClickListener(locationNameClickListener, answeredRequest)); answeredRequestItem.setAcceptMediaOnClickListener(new MMAcceptMediaOnClickListener(getActivity(), new MMAcceptedRequestCallback(), media.getString(MMSDKConstants.JSON_KEY_REQUEST_ID), media.getString(MMSDKConstants.JSON_KEY_MEDIA_ID))); answeredRequestItem.setRejectMediaOnClickListener(new MMRejectMediaOnClickListener(getActivity(), new MMRejectRequestCallback(), media.getString(MMSDKConstants.JSON_KEY_REQUEST_ID), media.getString(MMSDKConstants.JSON_KEY_MEDIA_ID))); } answeredRequestItems[i] = answeredRequestItem; } // tempItem = answeredRequestItems; answeredRequestsArrayAdapter = new MMAnsweredRequestsArrayAdapter(getActivity(), R.layout.listview_row_answered_requests, answeredRequestItems); elvAnsweredRequests.setAdapter(answeredRequestsArrayAdapter); if(answeredRequests.length() < 1) { displayAlertNoMoreAnsweredRequests(); } } private void displayAlertNoMoreAnsweredRequests() { new AlertDialog.Builder(getActivity()) .setTitle(R.string.ad_title_no_more_answered_requests) .setMessage(R.string.ad_message_no_more_answered_requests) .setCancelable(false) .setNeutralButton(R.string.ad_btn_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { getActivity().onBackPressed(); } }) .show(); } /** * * @author Dezapp, LLC * */ private class AnsweredRequestCallback implements MMCallback { @Override public void processCallback(Object obj) { Log.d(TAG, "AnsweredRequestCallback: "+(String) obj); if(obj != null) { if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) { Toast.makeText(getActivity(), getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show(); } else { try { getAnsweredRequestItems((String) obj); } catch (JSONException e) { e.printStackTrace(); } catch (NumberFormatException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } } } } /** * * @author Dezapp, LLC * */ private class LoadImageCallback implements MMCallback { private int position; public LoadImageCallback(int position) { this.position = position; } @Override public void processCallback(Object obj) { if(obj != null) { if(obj instanceof String) { if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) { Toast.makeText(getActivity(), getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show(); } } else if(obj instanceof Bitmap) { answeredRequestItems[position].setImageMedia(ThumbnailUtils.extractThumbnail((Bitmap) obj, MMUtility.getImageMediaMeasuredWidth(getActivity()), MMUtility.getImageMediaMeasuredHeight(getActivity()))); answeredRequestItems[position].setImageOnClickListener(new MMImageOnClickListener(getActivity(), (Bitmap) obj)); answeredRequestsArrayAdapter.notifyDataSetChanged(); } } } } /** * * @author Dezapp, LLC * */ private class MMAcceptedRequestCallback implements MMCallback { @Override public void processCallback(Object obj) { Log.d(TAG, (String) obj); MMProgressDialog.dismissDialog(); if(obj != null) { if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) { Toast.makeText(getActivity(), getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show(); } else { try { JSONObject jObj = new JSONObject((String) obj); MMRequestAdapter.getAnsweredRequests(new AnsweredRequestCallback()); Toast.makeText(getActivity(), jObj.getString(MMSDKConstants.JSON_KEY_DESCRIPTION), Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); } } } } } /** * * @author Dezapp, LLC * */ private class MMRejectRequestCallback implements MMCallback { @Override public void processCallback(Object obj) { MMProgressDialog.dismissDialog(); if(obj != null) { Log.d(TAG, (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 { JSONObject jObj = new JSONObject((String) obj); MMRequestAdapter.getAnsweredRequests(new AnsweredRequestCallback()); Toast.makeText(getActivity(), jObj.getString(MMSDKConstants.JSON_KEY_DESCRIPTION), Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); } } } } } }