package com.mobmonkey.mobmonkeyandroid.fragments;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.mobmonkey.mobmonkeyandroid.LocationDetailsMediaScreen;
import com.mobmonkey.mobmonkeyandroid.R;
import com.mobmonkey.mobmonkeyandroid.MakeARequestScreen;
import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMExistingHotSpotsArrayAdapter;
import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMLocationDetailsArrayAdapter;
import com.mobmonkey.mobmonkeyandroid.arrayadaptersitems.MMLocationDetailsItem;
import com.mobmonkey.mobmonkeyandroid.listeners.*;
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.MMFavoritesAdapter;
import com.mobmonkey.mobmonkeysdk.adapters.MMImageDownloaderAdapter;
import com.mobmonkey.mobmonkeysdk.adapters.MMImageLoaderAdapter;
import com.mobmonkey.mobmonkeysdk.adapters.MMLocationAdapter;
import com.mobmonkey.mobmonkeysdk.adapters.MMMediaAdapter;
import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants;
import com.mobmonkey.mobmonkeysdk.utils.MMCallback;
import com.mobmonkey.mobmonkeysdk.utils.MMDialog;
import com.mobmonkey.mobmonkeysdk.utils.MMProgressDialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.Display;
import android.view.Gravity;
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.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
/**
* @author Dezapp, LLC
*
*/
public class LocationDetailsFragment extends MMFragment implements OnClickListener,
OnItemClickListener {
private static final String TAG = "LocationDetailsFragment: ";
private SharedPreferences userPrefs;
private JSONArray favoritesList;
private JSONObject location;
private JSONObject locationInfo;
private JSONArray subLocations;
private TextView tvNavBarTitle;
private TextView tvLocName;
private ImageView ivHotSpotsBadge;
private TextView tvHotSpotsCounter;
private LinearLayout llMakeRequest;
private TextView tvMembersFound;
private MMExpandedListView elvLocInfo;
private LinearLayout llHotSpots;
private TextView tvHotSpots;
private MMExpandedListView elvHotSpots;
private Button btnCreateHotSpot;
private MMExpandedListView elvLoc;
private LinearLayout llDeleteLocationHotSpot;
private TextView tvDeleteLocationHotSpot;
private ProgressBar pbLoadMedia;
private LinearLayout llMedia;
private ImageView ivtnMedia;
private ImageButton ibPlay;
private TextView tvExpiryDate;
private TextView tvMediaMessage;
private ImageButton ibShareMedia;
private ImageButton ibStream;
private ImageButton ibVideo;
private ImageButton ibImage;
private TextView tvStreamMediaCount;
private TextView tvVideoMediaCount;
private TextView tvImageMediaCount;
private MMLocationDetailsArrayAdapter locArrayAdapter;
private MMExistingHotSpotsArrayAdapter existingHotSpotsArrayAdapter;
private MMLocationDetailsItem[] locItems;
private JSONArray streamMediaUrl;
private JSONArray videoMediaUrl;
private JSONArray imageMediaUrl;
private MMOnAddressFragmentItemClickListener addressFragmentItemClickListener;
private MMOnNearbyLocationsItemClickListener nearbyLocationsItemClickListener;
private MMOnCreateHotSpotFragmentClickListener createHotSpotFragmentClickListener;
private MMOnAddNotificationsFragmentItemClickListener addNotificationsFragmentItemClickListener;
private MMOnDeleteHotSpotFragmentFinishListener deleteHotSpotFinishFragmentListener;
private String mediaResults;
private boolean retrieveLocationDetails = true;
private boolean retrieveVideoMedia = true;
private boolean retrieveImageMedia = true;
private Bitmap imageMedia;
private View mediaButtonSelected;
private boolean isLocation;
/*
* (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_locationdetails_screen, container, false);
tvNavBarTitle = (TextView) view.findViewById(R.id.tvnavbartitle);
tvLocName = (TextView) view.findViewById(R.id.tvlocname);
ivHotSpotsBadge = (ImageView) view.findViewById(R.id.ivhotspotsbadge);
tvHotSpotsCounter = (TextView) view.findViewById(R.id.tvhotspotscounter);
llMakeRequest = (LinearLayout) view.findViewById(R.id.llmakerequest);
tvMembersFound = (TextView) view.findViewById(R.id.tvmembersfound);
elvLocInfo = (MMExpandedListView) view.findViewById(R.id.elvlocinfo);
llHotSpots = (LinearLayout) view.findViewById(R.id.llhotspots);
tvHotSpots = (TextView) view.findViewById(R.id.tvhotspots);
elvHotSpots = (MMExpandedListView) view.findViewById(R.id.elvhotspots);
btnCreateHotSpot = (Button) view.findViewById(R.id.btncreatehotspot);
elvLoc = (MMExpandedListView) view.findViewById(R.id.elvloc);
llDeleteLocationHotSpot = (LinearLayout) view.findViewById(R.id.lldeletelocationhotspot);
tvDeleteLocationHotSpot = (TextView) view.findViewById(R.id.tvdeletelocationhotspot);
pbLoadMedia = (ProgressBar) view.findViewById(R.id.pbloadmedia);
llMedia = (LinearLayout) view.findViewById(R.id.llmedia);
ivtnMedia = (ImageView) view.findViewById(R.id.ivtnmedia);
ibPlay = (ImageButton) view.findViewById(R.id.ibplay);
tvExpiryDate = (TextView) view.findViewById(R.id.tvexpirydate);
tvMediaMessage = (TextView) view.findViewById(R.id.tvmediamessage);
ibShareMedia = (ImageButton) view.findViewById(R.id.ibsharemedia);
ibStream = (ImageButton) view.findViewById(R.id.ibstream);
ibVideo = (ImageButton) view.findViewById(R.id.ibvideo);
ibImage = (ImageButton) view.findViewById(R.id.ibimage);
tvStreamMediaCount = (TextView) view.findViewById(R.id.tvstreammediacount);
tvVideoMediaCount = (TextView) view.findViewById(R.id.tvvideomediacount);
tvImageMediaCount = (TextView) view.findViewById(R.id.tvimagemediacount);
streamMediaUrl = new JSONArray();
videoMediaUrl = new JSONArray();
imageMediaUrl = new JSONArray();
try {
if(!userPrefs.getString(MMSDKConstants.SHARED_PREFS_KEY_FAVORITES, MMSDKConstants.DEFAULT_STRING_EMPTY).equals(MMSDKConstants.DEFAULT_STRING_EMPTY)) {
favoritesList = new JSONArray(userPrefs.getString(MMSDKConstants.SHARED_PREFS_KEY_FAVORITES, MMSDKConstants.DEFAULT_STRING_EMPTY));
} else {
favoritesList = new JSONArray();
}
location = new JSONObject(getArguments().getString(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS));
Log.d(TAG, TAG + "location: " + location.toString());
setLocationDetails();
checkForHotSpots();
if(retrieveLocationDetails) {
MMLocationAdapter.getLocationInfo(new LocationCallback(),
location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID),
location.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID));
MMMediaAdapter.retrieveAllMediaForLocation(new MediaCallback(),
location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID),
location.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID));
} else {
setLocationMembers();
hasMedia();
if(mediaButtonSelected != null) {
onClick(mediaButtonSelected);
}
}
} 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 MMOnAddressFragmentItemClickListener) {
addressFragmentItemClickListener = (MMOnAddressFragmentItemClickListener) activity;
if(activity instanceof MMOnNearbyLocationsItemClickListener) {
nearbyLocationsItemClickListener = (MMOnNearbyLocationsItemClickListener) activity;
if(activity instanceof MMOnCreateHotSpotFragmentClickListener) {
createHotSpotFragmentClickListener = (MMOnCreateHotSpotFragmentClickListener) activity;
if(activity instanceof MMOnAddNotificationsFragmentItemClickListener) {
addNotificationsFragmentItemClickListener = (MMOnAddNotificationsFragmentItemClickListener) activity;
if(activity instanceof MMOnDeleteHotSpotFragmentFinishListener) {
deleteHotSpotFinishFragmentListener = (MMOnDeleteHotSpotFragmentFinishListener) activity;
}
}
}
}
}
}
/*
* (non-Javadoc)
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
@Override
public void onClick(View view) {
Intent intent;
switch(view.getId()) {
case R.id.llmakerequest:
intent = new Intent(getActivity(), MakeARequestScreen.class);
intent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS, location.toString());
startActivity(intent);
break;
case R.id.tvmediamessage:
Intent urlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.mobmonkey.com")); // TODO: hardcoded, to be removed
// Intent urlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(locationInfo.getString(MMSDKConstants.JSON_KEY_MESSAGE_URL)));
startActivity(urlIntent);
break;
case R.id.ibstream:
intent = new Intent(getActivity(), LocationDetailsMediaScreen.class);
intent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_MEDIA_TYPE, MMSDKConstants.MEDIA_TYPE_LIVESTREAMING);
intent.putExtra(MMSDKConstants.MEDIA_LIVESTREAMING, streamMediaUrl.toString());
intent.putExtra(MMSDKConstants.MEDIA_VIDEO, videoMediaUrl.toString());
intent.putExtra(MMSDKConstants.MEDIA_IMAGE, imageMediaUrl.toString());
startActivity(intent);
break;
case R.id.ibvideo:
intent = new Intent(getActivity(), LocationDetailsMediaScreen.class);
intent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_MEDIA_TYPE, MMSDKConstants.MEDIA_TYPE_VIDEO);
intent.putExtra(MMSDKConstants.MEDIA_LIVESTREAMING, streamMediaUrl.toString());
intent.putExtra(MMSDKConstants.MEDIA_VIDEO, videoMediaUrl.toString());
intent.putExtra(MMSDKConstants.MEDIA_IMAGE, imageMediaUrl.toString());
startActivity(intent);
break;
case R.id.ibimage:
intent = new Intent(getActivity(), LocationDetailsMediaScreen.class);
intent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_MEDIA_TYPE, MMSDKConstants.MEDIA_TYPE_IMAGE);
intent.putExtra(MMSDKConstants.MEDIA_LIVESTREAMING, streamMediaUrl.toString());
intent.putExtra(MMSDKConstants.MEDIA_VIDEO, videoMediaUrl.toString());
intent.putExtra(MMSDKConstants.MEDIA_IMAGE, imageMediaUrl.toString());
startActivity(intent);
break;
case R.id.btncreatehotspot:
createHotSpotFragmentClickListener.onCreateHotSpotClick(locationInfo, MMSDKConstants.REQUEST_CODE_LOCATION_DETAILS);
break;
case R.id.lldeletelocationhotspot:
try {
promptDeleteLocationHotSpot();
} catch (JSONException e) {
e.printStackTrace();
}
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) {
switch(adapterView.getId()) {
case R.id.elvlocinfo:
if(position == 0) {
Intent dialerIntent = new Intent(Intent.ACTION_DIAL);
dialerIntent.setData(Uri.parse("tel:" + ((TextView)view.findViewById(R.id.tvlabel)).getText().toString()));
startActivity(dialerIntent);
} else if(position == 1) {
addressFragmentItemClickListener.onAddressFragmentItemClick(location);
}
break;
case R.id.elvhotspots:
nearbyLocationsItemClickListener.onNearbyLocationsItemClick(existingHotSpotsArrayAdapter.getItem(position).toString());
break;
case R.id.elvloc:
if(position == 0) {
addNotificationsFragmentItemClickListener.onAddNotificationsFragmentItemClick(location);
} else if(position == 1) {
TextView tvFavorite = (TextView) view.findViewById(R.id.tvlabel);
if(tvFavorite.getText().toString().equals(getString(R.string.tv_add_to_favorites))) {
addFavorite();
} else if(tvFavorite.getText().toString().equals(getString(R.string.tv_remove_from_favorites))) {
removeFavorite();
}
}
break;
}
}
/*
* (non-Javadoc)
* @see com.mobmonkey.mobmonkey.utils.MMFragment#onFragmentBackPressed()
*/
@Override
public void onFragmentBackPressed() {
Log.d(TAG, "onFragmentBackPressed");
MMLocationAdapter.cancelGetLocationInfo();
MMMediaAdapter.cancelRetrieveAllMediaForLocation();
}
/**
* Function that set all the details of the current location
* @throws JSONException
*/
private void setLocationDetails() throws JSONException {
MMLocationDetailsItem[] mmLocationDetailsItems = new MMLocationDetailsItem[2];
for(int i = 0; i < mmLocationDetailsItems.length; i++) {
mmLocationDetailsItems[i] = new MMLocationDetailsItem();
}
mmLocationDetailsItems[0].setLocationDetailIconId(R.drawable.cat_icon_telephone);
String phoneNumber = location.getString(MMSDKConstants.JSON_KEY_PHONE_NUMBER);
if(phoneNumber.equals(MMSDKConstants.DEFAULT_STRING_NULL) || phoneNumber.equals(MMSDKConstants.DEFAULT_STRING_EMPTY)) {
mmLocationDetailsItems[0].setLocationDetail(getString(R.string.tv_no_phone_number_available));
} else {
mmLocationDetailsItems[0].setLocationDetail(phoneNumber);
}
mmLocationDetailsItems[1].setLocationDetailIconId(R.drawable.cat_icon_address);
String address = MMSDKConstants.DEFAULT_STRING_EMPTY;
address = location.isNull(MMSDKConstants.JSON_KEY_ADDRESS) ? MMSDKConstants.DEFAULT_STRING_EMPTY : location.getString(MMSDKConstants.JSON_KEY_ADDRESS);
address += MMSDKConstants.DEFAULT_STRING_NEWLINE;
String localityRegion = MMSDKConstants.DEFAULT_STRING_EMPTY;
localityRegion += location.isNull(MMSDKConstants.JSON_KEY_LOCALITY) ? MMSDKConstants.DEFAULT_STRING_EMPTY : location.getString(MMSDKConstants.JSON_KEY_LOCALITY);
localityRegion += location.isNull(MMSDKConstants.JSON_KEY_LOCALITY) || location.isNull(MMSDKConstants.JSON_KEY_REGION) ? MMSDKConstants.DEFAULT_STRING_EMPTY : MMSDKConstants.DEFAULT_STRING_COMMA_SPACE;
localityRegion += location.isNull(MMSDKConstants.JSON_KEY_REGION) ? MMSDKConstants.DEFAULT_STRING_EMPTY : location.getString(MMSDKConstants.JSON_KEY_REGION);
mmLocationDetailsItems[1].setLocationDetail(address + localityRegion);
ArrayAdapter<MMLocationDetailsItem> arrayAdapter = new MMLocationDetailsArrayAdapter(getActivity(), R.layout.listview_row_locationdetails, mmLocationDetailsItems);
arrayAdapter.isEnabled(0);
elvLocInfo.setAdapter(arrayAdapter);
locItems = new MMLocationDetailsItem[2];
for(int i = 0; i < locItems.length; i++) {
locItems[i] = new MMLocationDetailsItem();
}
locItems[0].setLocationDetailIconId(R.drawable.cat_icon_alarm_clock);
locItems[0].setLocationDetail(getString(R.string.tv_add_notifications));
locItems[1].setLocationDetailIconId(R.drawable.cat_icon_favorite);
locItems[1].setLocationDetail(getString(R.string.tv_add_to_favorites));
for(int i = 0; i < favoritesList.length(); i++) {
if(favoritesList.getJSONObject(i).getString(MMSDKConstants.JSON_KEY_LOCATION_ID).equals(location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID))) {
locItems[1].setLocationDetail(getString(R.string.tv_remove_from_favorites));
break;
}
}
locArrayAdapter = new MMLocationDetailsArrayAdapter(getActivity(), R.layout.listview_row_locationdetails, locItems);
elvLoc.setAdapter(locArrayAdapter);
llMakeRequest.setOnClickListener(LocationDetailsFragment.this);
elvLocInfo.setOnItemClickListener(LocationDetailsFragment.this);
elvLoc.setOnItemClickListener(LocationDetailsFragment.this);
}
/**
* @throws JSONException
*
*/
private void checkForHotSpots() throws JSONException {
if(location.isNull(MMSDKConstants.JSON_KEY_PARENT_LOCATION_ID)) {
tvNavBarTitle.setText(location.getString(MMSDKConstants.JSON_KEY_NAME));
tvLocName.setText(location.getString(MMSDKConstants.JSON_KEY_NAME));
if(!location.isNull(MMSDKConstants.JSON_KEY_SUB_LOCATIONS)) {
subLocations = location.getJSONArray(MMSDKConstants.JSON_KEY_SUB_LOCATIONS);
tvHotSpots.setVisibility(View.VISIBLE);
} else {
LinearLayout.LayoutParams params = (LayoutParams) llHotSpots.getLayoutParams();
params.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5.0f, getActivity().getResources().getDisplayMetrics());
btnCreateHotSpot.setLayoutParams(params);
}
btnCreateHotSpot.setOnClickListener(LocationDetailsFragment.this);
tvDeleteLocationHotSpot.setText(R.string.btn_delete_location);
isLocation = true;
} else {
tvNavBarTitle.setText(getString(R.string.tv_title_hot_spot) + MMSDKConstants.DEFAULT_STRING_SPACE + location.getString(MMSDKConstants.JSON_KEY_NAME));
tvLocName.setText(getString(R.string.tv_title_hot_spot) + MMSDKConstants.DEFAULT_STRING_SPACE + location.getString(MMSDKConstants.JSON_KEY_NAME));
tvDeleteLocationHotSpot.setText(R.string.btn_delete_hot_spot);
isLocation = false;
}
}
/**
* @throws JSONException
*
*/
private void setHotSpots() throws JSONException {
if(location.isNull(MMSDKConstants.JSON_KEY_PARENT_LOCATION_ID)) {
if(subLocations != null && subLocations.length() > 0) {
ArrayList<JSONObject> hotSpots = new ArrayList<JSONObject>();
for(int i = 0; i < subLocations.length(); i++) {
hotSpots.add(subLocations.getJSONObject(i));
}
tvHotSpotsCounter.setText(Integer.toString(subLocations.length()));
existingHotSpotsArrayAdapter = new MMExistingHotSpotsArrayAdapter(getActivity(), R.layout.listview_row_location_details_hot_spots, hotSpots);
elvHotSpots.setAdapter(existingHotSpotsArrayAdapter);
elvHotSpots.setOnItemClickListener(LocationDetailsFragment.this);
ivHotSpotsBadge.setVisibility(View.VISIBLE);
tvHotSpotsCounter.setVisibility(View.VISIBLE);
elvHotSpots.setVisibility(View.VISIBLE);
btnCreateHotSpot.setBackgroundResource(R.drawable.listview_border_bottom_corners_round_no_top);
btnCreateHotSpot.setPadding(20, 20, 20, 20);
} else {
tvHotSpots.setVisibility(View.GONE);
btnCreateHotSpot.setBackgroundResource(R.drawable.listview_border_four_corners_round);
}
btnCreateHotSpot.setVisibility(View.VISIBLE);
}
if(!location.isNull(MMSDKConstants.JSON_KEY_SUBMITTER_EMAIL)) {
if(location.getString(MMSDKConstants.JSON_KEY_SUBMITTER_EMAIL).equals(userPrefs.getString(MMSDKConstants.KEY_USER, MMSDKConstants.DEFAULT_STRING_EMPTY)) ||
location.getString(MMSDKConstants.JSON_KEY_SUBMITTER_EMAIL).equals(userPrefs.getString(MMSDKConstants.KEY_OAUTH_PROVIDER_USER_NAME, MMSDKConstants.DEFAULT_STRING_EMPTY))) {
llDeleteLocationHotSpot.setOnClickListener(LocationDetailsFragment.this);
llDeleteLocationHotSpot.setVisibility(View.VISIBLE);
Log.d(TAG, TAG + "submitter email is same as login email!!!!!");
//TODO: implement display update/delete location button
}
}
}
/**
*
* @throws JSONException
*/
private void setLocationMembers() throws JSONException {
if(locationInfo.getInt(MMSDKConstants.JSON_KEY_MONKEYS) == MMSDKConstants.DEFAULT_INT_ZERO) {
tvMembersFound.setText(R.string.tv_no_members_found);
} else {
getString(R.string.tv_members_found);
tvMembersFound.setText(locationInfo.getInt(MMSDKConstants.JSON_KEY_MONKEYS) + MMSDKConstants.DEFAULT_STRING_SPACE + getString(R.string.tv_members_found));
}
tvMediaMessage.setText("See what's happening now on MobMonkey!"); // TODO: hardcoded, to be removed later
tvMediaMessage.setOnClickListener(LocationDetailsFragment.this);
// tvMediaMessage.setText(locationInfo.getString(MMSDKConstants.JSON_KEY_MESSAGE));
}
/**
* Function that handles the processing of the result from retrieve all media call to the server
* @throws JSONException
*/
private void hasMedia() throws JSONException {
if(mediaResults != null) {
JSONObject mediaJObj = new JSONObject(mediaResults);
JSONArray mediaJArr = mediaJObj.getJSONArray(MMSDKConstants.JSON_KEY_MEDIA);
int streamMediaCount = 0;
int videoMediaCount = 0;
int imageMediaCount = 0;
pbLoadMedia.setVisibility(View.GONE);
setHotSpots();
if(mediaJArr.length() > 0) {
llMedia.setVisibility(View.VISIBLE);
boolean isFirstMedia = true;
for(int i = 0; i < mediaJArr.length(); i++) {
JSONObject jObj = mediaJArr.getJSONObject(i);
String media = jObj.getString(MMSDKConstants.JSON_KEY_TYPE);
if(media.equals(MMSDKConstants.MEDIA_LIVESTREAMING)) {
if(isFirstMedia) {
if(retrieveVideoMedia) {
MMImageLoaderAdapter.loadImage(new LoadVideoThumbnailCallback(),
getActivity().getWindowManager().getDefaultDisplay(),
jObj.getString(MMSDKConstants.JSON_KEY_THUMB_URL));
} else {
ivtnMedia.setImageBitmap(imageMedia);
}
tvExpiryDate.setText(MMUtility.getExpiryDate(System.currentTimeMillis() - jObj.getLong(MMSDKConstants.JSON_KEY_UPLOADED_DATE)));
ibPlay.setVisibility(View.VISIBLE);
ibPlay.setOnClickListener(LocationDetailsFragment.this);
isFirstMedia = false;
}
streamMediaUrl.put(jObj);
streamMediaCount++;
} else if(media.equals(MMSDKConstants.MEDIA_VIDEO)) {
if(isFirstMedia) {
if(retrieveVideoMedia) {
MMImageLoaderAdapter.loadImage(new LoadVideoThumbnailCallback(),
getActivity().getWindowManager().getDefaultDisplay(),
jObj.getString(MMSDKConstants.JSON_KEY_THUMB_URL));
} else {
ivtnMedia.setImageBitmap(ThumbnailUtils.extractThumbnail(imageMedia, MMUtility.getImageMediaMeasuredWidth(getActivity()), MMUtility.getImageMediaMeasuredHeight(getActivity())));
}
tvExpiryDate.setVisibility(View.VISIBLE);
tvExpiryDate.setText(MMUtility.getExpiryDate(System.currentTimeMillis() - jObj.getLong(MMSDKConstants.JSON_KEY_UPLOADED_DATE)));
ibPlay.setVisibility(View.VISIBLE);
ibPlay.setOnClickListener(new MMVideoPlayOnClickListener(getActivity(), jObj.getString(MMSDKConstants.JSON_KEY_MEDIA_URL)));
isFirstMedia = false;
}
videoMediaUrl.put(jObj);
videoMediaCount++;
} else if(media.equals(MMSDKConstants.MEDIA_IMAGE)) {
if(isFirstMedia) {
ivtnMedia.setClickable(true);
if(retrieveImageMedia) {
// MMImageDownloaderAdapter.download(jObj.getString(MMSDKConstants.JSON_KEY_MEDIA_URL), ivtnMedia, MMUtility.getImageMediaMeasuredWidth(getActivity()), MMUtility.getImageMediaMeasuredHeight(getActivity()), imageMedia);
// retrieveImageMedia = false;
// ivtnMedia.setOnClickListener(new MMImageOnClickListener(getActivity(), imageMedia));
MMImageLoaderAdapter.loadImage(new LoadImageCallback(),
getActivity().getWindowManager().getDefaultDisplay(),
jObj.getString(MMSDKConstants.JSON_KEY_MEDIA_URL));
} else {
imageMedia = MMImageDownloaderAdapter.getBitmapFromCache(MMSDKConstants.JSON_KEY_MEDIA_URL);
ivtnMedia.setImageBitmap(ThumbnailUtils.extractThumbnail(imageMedia, MMUtility.getImageMediaMeasuredWidth(getActivity()), MMUtility.getImageMediaMeasuredHeight(getActivity())));
ivtnMedia.setOnClickListener(new MMImageOnClickListener(getActivity(), imageMedia));
}
tvExpiryDate.setVisibility(View.VISIBLE);
tvExpiryDate.setText(MMUtility.getExpiryDate(System.currentTimeMillis() - jObj.getLong(MMSDKConstants.JSON_KEY_UPLOADED_DATE)));
isFirstMedia = false;
}
imageMediaUrl.put(jObj);
imageMediaCount++;
}
}
if(streamMediaCount > 0) {
ibStream.setOnClickListener(LocationDetailsFragment.this);
ibStream.setBackgroundResource(R.drawable.tn_hasmedia_stream);
tvStreamMediaCount.setText(streamMediaCount + MMSDKConstants.DEFAULT_STRING_EMPTY);
}
if(videoMediaCount > 0) {
ibVideo.setOnClickListener(LocationDetailsFragment.this);
ibVideo.setBackgroundResource(R.drawable.tn_hasmedia_video);
tvVideoMediaCount.setText(videoMediaCount + MMSDKConstants.DEFAULT_STRING_EMPTY);
}
if(imageMediaCount > 0) {
ibImage.setOnClickListener(LocationDetailsFragment.this);
ibImage.setBackgroundResource(R.drawable.tn_hasmedia_image);
tvImageMediaCount.setText(imageMediaCount + MMSDKConstants.DEFAULT_STRING_EMPTY);
}
ibShareMedia.setOnClickListener(new MMShareMediaOnClickListener(getActivity()));
}
// TODO: to be removed, for testing only
// else {
// llMedia.setVisibility(View.VISIBLE);
// tvExpiryDate.setText("30m");
//// MMImageLoaderAdapter.loadImage(new LoadImageCallback(), "http://i.imgur.com/T0Va07Y.jpg");
//
// mediaStreamVideoUrl = "http://www.tools4movies.com/dvd_catalyst_profile_samples/Harold%20Kumar%203%20Christmas%20tablet.mp4";
// ibPlay.setVisibility(View.VISIBLE);
// ibPlay.setOnClickListener(LocationDetailsFragment.this);
// streamMediaCount = 1;
//
// if(streamMediaCount > 0) {
// ivtnStream.setBackgroundResource(R.drawable.tn_hasmedia_stream);
// tvStreamMediaCount.setText(streamMediaCount + MMAPIConstants.DEFAULT_STRING);
// }
// if(videoMediaCount > 0) {
// ivtnVideo.setBackgroundResource(R.drawable.tn_hasmedia_video);
// tvVideoMediaCount.setText(videoMediaCount + MMAPIConstants.DEFAULT_STRING);
// }
// if(imageMediaCount > 0) {
// ivtnImage.setBackgroundResource(R.drawable.tn_hasmedia_image);
// tvImageMediaCount.setText(imageMediaCount + MMAPIConstants.DEFAULT_STRING);
// }
// }
}
}
/**
* Make a server call to add location to favorites
*/
private void addFavorite() {
try {
MMFavoritesAdapter.addFavorite(new AddFavoriteCallback(),
location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID),
location.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID));
MMProgressDialog.displayDialog(getActivity(),
MMSDKConstants.DEFAULT_STRING_EMPTY,
getString(R.string.pd_adding_to_favorites));
} catch (JSONException e) {
e.printStackTrace();
}
}
/**
* Make a server call to remove location from favorites
*/
private void removeFavorite() {
try {
MMFavoritesAdapter.removeFavorite(new RemoveFavoriteCallback(),
location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID),
location.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID));
MMProgressDialog.displayDialog(getActivity(),
MMSDKConstants.DEFAULT_STRING_EMPTY,
getString(R.string.pd_removing_from_favorites));
} catch (JSONException e) {
e.printStackTrace();
}
}
/**
* @throws JSONException
*
*/
private void promptDeleteLocationHotSpot() throws JSONException {
String message = MMSDKConstants.DEFAULT_STRING_EMPTY;
if(isLocation) {
message = getString(R.string.ad_message_delete_location) + location.getString(MMSDKConstants.JSON_KEY_NAME) + getString(R.string.ad_message_delete_location_question_mark);
} else {
message = getString(R.string.ad_message_delete_hot_spot) + location.getString(MMSDKConstants.JSON_KEY_NAME) + getString(R.string.ad_message_delete_hot_spot_question_mark);
}
AlertDialog confirmDeleteAlert = new AlertDialog.Builder(getActivity())
.setTitle(R.string.ad_title_confirm_delete)
.setMessage(message)
.setCancelable(false)
.setPositiveButton(R.string.ad_btn_delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
if(isLocation) {
MMLocationAdapter.deleteLocation(new DeleteLocationCallback(),
location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID),
location.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID));
MMProgressDialog.displayDialog(getActivity(),
MMSDKConstants.DEFAULT_STRING_EMPTY,
getString(R.string.pd_deleting_location));
} else {
MMLocationAdapter.deleteHotSpot(new DeleteHotSpotCallback(),
location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID),
location.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID));
MMProgressDialog.displayDialog(getActivity(),
MMSDKConstants.DEFAULT_STRING_EMPTY,
getString(R.string.pd_deleting_hot_spot));
}
Log.d(TAG, TAG + "user sign email: " + userPrefs.getString(MMSDKConstants.KEY_USER, MMSDKConstants.DEFAULT_STRING_EMPTY) + " submitter email: " + location.getString(MMSDKConstants.JSON_KEY_SUBMITTER_EMAIL));
} catch (JSONException e) {
e.printStackTrace();
}
}
})
.setNegativeButton(R.string.ad_btn_cancel, null)
.show();
TextView tvMessage = (TextView) confirmDeleteAlert.findViewById(android.R.id.message);
tvMessage.setGravity(Gravity.CENTER);
confirmDeleteAlert.show();
}
/**
* Callback to handle the result after making retrieve location info call to the server
* @author Dezapp, LLC
*
*/
private class LocationCallback implements MMCallback {
@Override
public void processCallback(Object obj) {
if(obj != null) {
Log.d(TAG, TAG + "location info: " + (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 {
locationInfo = new JSONObject((String) obj);
if(locationInfo.has(MMSDKConstants.JSON_KEY_STATUS)) {
MMMediaAdapter.cancelRetrieveAllMediaForLocation();
MMProgressDialog.dismissDialog();
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customDialog = inflater.inflate(com.mobmonkey.mobmonkeysdk.R.layout.mmtoast, null);
ImageView ivToastImage = (ImageView)customDialog.findViewById(R.id.ivtoastimage);
ivToastImage.setImageResource(android.R.drawable.ic_menu_close_clear_cancel);
TextView ivToastText = (TextView)customDialog.findViewById(R.id.tvtoasttext);
ivToastText.setText(R.string.toast_unable_to_load_location_info);
MMDialog.displayCustomDialog(getActivity(), customDialog);
Toast.makeText(getActivity(), locationInfo.getString(MMSDKConstants.JSON_KEY_DESCRIPTION), Toast.LENGTH_LONG).show();
// MMToast.makeToastWithImage(getActivity().getApplicationContext(),
// getActivity().getResources().getDrawable(android.R.drawable.ic_menu_close_clear_cancel),
// getString(R.string.toast_unable_to_load_location_info)).show();
getActivity().onBackPressed();
} else {
retrieveLocationDetails = false;
setLocationMembers();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
/**
* Callback to handle the result after making retrieve all media call to the server
* @author Dezapp, LLC
*
*/
private class MediaCallback implements MMCallback {
@Override
public void processCallback(Object obj) {
pbLoadMedia.setVisibility(View.GONE);
if(obj != null) {
Log.d(TAG, TAG + "mediaResults: " + (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);
if(!jObj.has(MMSDKConstants.JSON_KEY_STATUS)) {
mediaResults = (String) obj;
hasMedia();
} else {
MMProgressDialog.dismissDialog();
Toast.makeText(getActivity(), jObj.getString(MMSDKConstants.JSON_KEY_DESCRIPTION), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
/**
*
* @author Dezapp, LLC
*
*/
private class LoadVideoThumbnailCallback implements MMCallback {
@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){
retrieveVideoMedia = false;
imageMedia = (Bitmap) obj;
ivtnMedia.setImageBitmap(ThumbnailUtils.extractThumbnail(imageMedia, MMUtility.getImageMediaMeasuredWidth(getActivity()), MMUtility.getImageMediaMeasuredHeight(getActivity())));
}
}
}
}
/**
* Callback to display the image it retrieve from the mediaurl
* @author Dezapp, LLC
*
*/
private class LoadImageCallback implements MMCallback {
@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){
retrieveImageMedia = false;
imageMedia = (Bitmap) obj;
Display display = getActivity().getWindowManager().getDefaultDisplay();
Log.d(TAG, TAG + "display width: " + display.getWidth());
ivtnMedia.setImageBitmap(ThumbnailUtils.extractThumbnail(imageMedia, MMUtility.getImageMediaMeasuredWidth(getActivity()), MMUtility.getImageMediaMeasuredHeight(getActivity())));
ivtnMedia.setOnClickListener(new MMImageOnClickListener(getActivity(), Bitmap.createScaledBitmap(imageMedia, display.getWidth(), display.getHeight(), true)));
}
}
}
}
/**
* Callback to handle the result after making add favorite call to the server
* @author Dezapp, LLC
*
*/
private class AddFavoriteCallback implements MMCallback {
@Override
public void processCallback(Object 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 response = new JSONObject(((String) obj));
if(response.getString(MMSDKConstants.JSON_KEY_STATUS).equals(MMSDKConstants.RESPONSE_STATUS_SUCCESS)) {
Toast.makeText(getActivity(), R.string.toast_add_favorite_success, Toast.LENGTH_SHORT).show();
locItems[1].setLocationDetail(getString(R.string.tv_remove_from_favorites));
locArrayAdapter.notifyDataSetChanged();
} else {
MMDialog.dismissDialog();
Toast.makeText(getActivity(), R.string.toast_add_favorite_fail, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
/**
* Callback to handle the result after making remove favorite call to the server
* @author Dezapp, LLC
*
*/
private class RemoveFavoriteCallback implements MMCallback {
@Override
public void processCallback(Object 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 response = new JSONObject(((String) obj));
if(response.getString(MMSDKConstants.JSON_KEY_STATUS).equals(MMSDKConstants.RESPONSE_STATUS_SUCCESS)) {
Toast.makeText(getActivity(), R.string.toast_remove_favorite_successs, Toast.LENGTH_SHORT).show();
locItems[1].setLocationDetail(getString(R.string.tv_add_to_favorites));
locArrayAdapter.notifyDataSetChanged();
} else {
MMProgressDialog.dismissDialog();
Toast.makeText(getActivity(), R.string.toast_remove_favorite_fail, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
/**
*
* @author Dezapp, LLC
*
*/
private class DeleteLocationCallback implements MMCallback {
@Override
public void processCallback(Object 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 {
Log.d(TAG, TAG + "response: " + ((String) obj));
try {
JSONObject jObj = new JSONObject((String) obj);
if(jObj.getString(MMSDKConstants.JSON_KEY_STATUS).equals(MMSDKConstants.RESPONSE_STATUS_SUCCESS)) {
getActivity().onBackPressed();
} else {
}
Toast.makeText(getActivity(), jObj.getString(MMSDKConstants.JSON_KEY_DESCRIPTION), Toast.LENGTH_LONG).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
/**
*
* @author Dezapp, LLC
*
*/
private class DeleteHotSpotCallback implements MMCallback {
@Override
public void processCallback(Object 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 {
Log.d(TAG, TAG + "response: " + ((String) obj));
try {
JSONObject jObj = new JSONObject((String) obj);
if(jObj.getString(MMSDKConstants.JSON_KEY_STATUS).equals(MMSDKConstants.RESPONSE_STATUS_SUCCESS)) {
getActivity().onBackPressed();
// deleteHotSpotFinishFragmentListener.onDeleteHotSpotFinish(location.getString(MMSDKConstants.JSON_KEY_LOCATION_ID), location.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID));
} else {
}
Toast.makeText(getActivity(), jObj.getString(MMSDKConstants.JSON_KEY_DESCRIPTION), Toast.LENGTH_LONG).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
}