package com.mobmonkey.mobmonkeyandroid.fragments;
import java.io.File;
import java.util.LinkedList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
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.MMTopViewedArrayAdapter;
import com.mobmonkey.mobmonkeyandroid.arrayadaptersitems.MMMediaItem;
import com.mobmonkey.mobmonkeyandroid.listeners.MMImageOnClickListener;
import com.mobmonkey.mobmonkeyandroid.listeners.MMShareMediaOnClickListener;
import com.mobmonkey.mobmonkeyandroid.listeners.MMVideoPlayOnClickListener;
import com.mobmonkey.mobmonkeyandroid.utils.MMConstants;
import com.mobmonkey.mobmonkeyandroid.utils.MMFragment;
import com.mobmonkey.mobmonkeyandroid.utils.MMUtility;
import com.mobmonkey.mobmonkeysdk.adapters.MMImageLoaderAdapter;
import com.mobmonkey.mobmonkeysdk.adapters.MMTrendingAdapter;
import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants;
import com.mobmonkey.mobmonkeysdk.utils.MMCallback;
import com.mobmonkey.mobmonkeysdk.utils.MMLocationListener;
import com.mobmonkey.mobmonkeysdk.utils.MMLocationManager;
import com.mobmonkey.mobmonkeysdk.utils.MMProgressDialog;
/**
* @author Dezapp, LLC
*
*/
public class TopViewedFragment extends MMFragment {
public static final String TAG = "TopViewedFragment: ";
private ListView lvTopViewed;
private JSONArray topViewed;
private MMMediaItem[] topViewedItems;
private MMTopViewedArrayAdapter adapter;
private SharedPreferences userPrefs;
@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_topviewed_screen, container, false);
lvTopViewed = (ListView) view.findViewById(R.id.lvtopviewed);
getTrending();
return view;
}
/* (non-Javadoc)
* @see com.mobmonkey.mobmonkey.utils.MMFragment#onFragmentBackPressed()
*/
@Override
public void onFragmentBackPressed() {
}
/**
*
* @param position
*/
private void getTrending() {
if(MMLocationManager.isGPSEnabled() && MMLocationManager.getGPSLocation() != null) {
MMTrendingAdapter.getTopViewed(new TopViewedCallback(),
MMSDKConstants.SEARCH_TIME_WEEK);
MMProgressDialog.displayDialog(getActivity(),
MMSDKConstants.DEFAULT_STRING_EMPTY,
getString(R.string.pd_retrieving_all_top_viewed));
}
}
/**
*
*/
private void getMediaForAllLocation() {
try {
for(int i = 0; i < topViewed.length(); i++) {
JSONObject jObj = topViewed.getJSONObject(i);
topViewedItems[i] = new MMMediaItem();
JSONObject jObjMedia = jObj.getJSONObject(MMSDKConstants.JSON_KEY_MEDIA);
if(jObjMedia.getString(MMSDKConstants.JSON_KEY_TYPE).equals(MMSDKConstants.MEDIA_IMAGE)) {
MMImageLoaderAdapter.loadImage(new LoadMediaThumbnailCallback(i),
getActivity().getWindowManager().getDefaultDisplay(),
jObjMedia.getString(MMSDKConstants.JSON_KEY_MEDIA_URL));
topViewedItems[i].setIsImage(true);
} else if(jObjMedia.getString(MMSDKConstants.JSON_KEY_TYPE).equals(MMSDKConstants.MEDIA_VIDEO)) {
MMImageLoaderAdapter.loadImage(new LoadMediaThumbnailCallback(i),
getActivity().getWindowManager().getDefaultDisplay(),
jObjMedia.getString(MMSDKConstants.JSON_KEY_THUMB_URL));
topViewedItems[i].setIsVideo(true);
topViewedItems[i].setPlayOnClickListener(new MMVideoPlayOnClickListener(getActivity(), jObjMedia.getString(MMSDKConstants.JSON_KEY_MEDIA_URL)));
}
topViewedItems[i].setLocationName(jObj.getString(MMSDKConstants.JSON_KEY_NAME));
topViewedItems[i].setExpiryDate(MMUtility.getExpiryDate(System.currentTimeMillis() - jObjMedia.getLong(MMSDKConstants.JSON_KEY_UPLOADED_DATE)));
topViewedItems[i].setShareMediaOnClickListener(new MMShareMediaOnClickListener(getActivity()));
}
adapter = new MMTopViewedArrayAdapter(getActivity(), R.layout.listview_row_topviewed, topViewedItems);
lvTopViewed.setAdapter(adapter);
} catch (JSONException ex) {
ex.printStackTrace();
}
}
/**
*
* @author Dezapp, LLC
*
*/
private class TopViewedCallback implements MMCallback {
@Override
public void processCallback(Object obj) {
MMProgressDialog.dismissDialog();
Log.d(TAG, TAG + "topViewed: " + ((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 {
topViewed = new JSONArray((String) obj);
topViewedItems = new MMMediaItem[topViewed.length()];
Log.d(TAG, TAG + topViewed.toString());
getMediaForAllLocation();
} catch (JSONException e) {
e.printStackTrace();
// TODO: display custom dialog informing user there is an error occurred while loading topview locations
// MMDialog.displayCustomDialog(getActivity(), customProgressDialog);
getActivity().onBackPressed();
}
}
} else {
// TODO: display custom dialog informing user there are no topviewed locations
// MMDialog.displayCustomDialog(getActivity(), customProgressDialog);
getActivity().onBackPressed();
}
}
}
/**
* Callback to display the image it retrieve from the mediaurl
* @author Dezapp, LLC
*
*/
private class LoadMediaThumbnailCallback implements MMCallback {
int topViewedLocation;
public LoadMediaThumbnailCallback(int topViewedLocation) {
this.topViewedLocation = topViewedLocation;
}
@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) {
topViewedItems[topViewedLocation].setImageMedia(ThumbnailUtils.extractThumbnail((Bitmap) obj,
MMUtility.getImageMediaMeasuredWidth(getActivity()),
MMUtility.getImageMediaMeasuredHeight(getActivity())));
topViewedItems[topViewedLocation].setImageOnClickListener(new MMImageOnClickListener(getActivity(), (Bitmap) obj));
adapter.notifyDataSetChanged();
}
}
}
}
}