package com.mobmonkey.mobmonkeyandroid; import java.io.File; import java.util.LinkedList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMMediaArrayAdapter; 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.MMUtility; import com.mobmonkey.mobmonkeysdk.adapters.MMImageLoaderAdapter; import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants; import com.mobmonkey.mobmonkeysdk.utils.MMCallback; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.media.MediaMetadataRetriever; import android.media.ThumbnailUtils; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; import android.widget.RadioGroup.OnCheckedChangeListener; /** * @author Dezapp, LLC * */ public class LocationDetailsMediaScreen extends Activity implements OnCheckedChangeListener { private static final String TAG = "LocationDetailsMediaScreen"; private RadioGroup rgMedia; private RadioButton rbStream; private RadioButton rbVideo; private RadioButton rbImage; private ListView lvStreamMedia; private ListView lvVideoMedia; private ListView lvImageMedia; private int mediaType; private LinkedList<MMMediaItem> mmStreamMediaItems; private LinkedList<MMMediaItem> mmVideoMediaItems; private LinkedList<MMMediaItem> mmImageMediaItems; MMMediaArrayAdapter streamAdapter; MMMediaArrayAdapter videoAdapter; MMMediaArrayAdapter imageAdapter; private boolean retrieveStreamMedia; private boolean retrieveVideoMedia; private boolean retrieveImageMedia; private JSONArray streamMediaUrls; private JSONArray videoMediaUrls; private JSONArray imageMediaUrls; /* (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); overridePendingTransition(R.anim.slide_bottom_in, R.anim.slide_hold); setContentView(R.layout.location_details_media_screen); rgMedia = (RadioGroup) findViewById(R.id.rgmedia); rbStream = (RadioButton) findViewById(R.id.rbstreammedia); rbVideo = (RadioButton) findViewById(R.id.rbvideomedia); rbImage = (RadioButton) findViewById(R.id.rbimagemedia); lvStreamMedia = (ListView) findViewById(R.id.lvstreammedia); lvVideoMedia = (ListView) findViewById(R.id.lvvideomedia); lvImageMedia = (ListView) findViewById(R.id.lvimagemedia); mediaType = getIntent().getIntExtra(MMSDKConstants.KEY_INTENT_EXTRA_MEDIA_TYPE, MMSDKConstants.DEFAULT_INT); mmStreamMediaItems = new LinkedList<MMMediaItem>(); mmVideoMediaItems = new LinkedList<MMMediaItem>(); mmImageMediaItems = new LinkedList<MMMediaItem>(); retrieveStreamMedia = true; retrieveVideoMedia = true; retrieveImageMedia = true; rgMedia.setOnCheckedChangeListener(LocationDetailsMediaScreen.this); try { getMediaUrls(); } catch (JSONException e) { e.printStackTrace(); } } /* * (non-Javadoc) * @see android.widget.RadioGroup.OnCheckedChangeListener#onCheckedChanged(android.widget.RadioGroup, int) */ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch(checkedId) { case R.id.rbstreammedia: rbStreamChecked(); break; case R.id.rbvideomedia: rbVideoChecked(); break; case R.id.rbimagemedia: rbImageChecked(); break; } } /* (non-Javadoc) * @see android.app.Activity#onBackPressed() */ @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.slide_hold, R.anim.slide_bottom_out); } /** * * @throws JSONException */ private void getMediaUrls() throws JSONException { streamMediaUrls = new JSONArray(getIntent().getStringExtra(MMSDKConstants.MEDIA_LIVESTREAMING)); videoMediaUrls = new JSONArray(getIntent().getStringExtra(MMSDKConstants.MEDIA_VIDEO)); imageMediaUrls = new JSONArray(getIntent().getStringExtra(MMSDKConstants.MEDIA_IMAGE)); if(mediaType == MMSDKConstants.MEDIA_TYPE_LIVESTREAMING) { rbStream.setChecked(true); } else if(mediaType == MMSDKConstants.MEDIA_TYPE_VIDEO) { rbVideo.setChecked(true); } else if(mediaType == MMSDKConstants.MEDIA_TYPE_IMAGE) { rbImage.setChecked(true); } } /** * */ private void rbStreamChecked() { lvStreamMedia.setVisibility(View.VISIBLE); lvVideoMedia.setVisibility(View.INVISIBLE); lvImageMedia.setVisibility(View.INVISIBLE); try { getStreamMediaItems(); } catch (JSONException e) { e.printStackTrace(); } } /** * */ private void rbVideoChecked() { lvStreamMedia.setVisibility(View.INVISIBLE); lvVideoMedia.setVisibility(View.VISIBLE); lvImageMedia.setVisibility(View.INVISIBLE); try { getVideoMediaItems(); } catch (JSONException e) { e.printStackTrace(); } } /** * */ private void rbImageChecked() { lvStreamMedia.setVisibility(View.INVISIBLE); lvVideoMedia.setVisibility(View.INVISIBLE); lvImageMedia.setVisibility(View.VISIBLE); try { getImageMediaItems(); } catch (JSONException e) { e.printStackTrace(); } } /** * * @throws JSONException */ private void getStreamMediaItems() throws JSONException { if(retrieveStreamMedia) { for(int i = 0; i < streamMediaUrls.length(); i++) { JSONObject jObj = streamMediaUrls.getJSONObject(i); MMMediaItem mmMediaItem = new MMMediaItem(); MMImageLoaderAdapter.loadImage(new LoadStreamThumbnailCallback(i), getWindowManager().getDefaultDisplay(), jObj.getString(MMSDKConstants.JSON_KEY_THUMB_URL)); if(i == streamMediaUrls.length() - 1) { retrieveStreamMedia = false; } mmMediaItem.setExpiryDate(MMUtility.getExpiryDate(System.currentTimeMillis() - jObj.getLong(MMSDKConstants.JSON_KEY_UPLOADED_DATE))); mmMediaItem.setIsVideo(true); mmMediaItem.setPlayOnClickListener(new MMVideoPlayOnClickListener(LocationDetailsMediaScreen. this, jObj.getString(MMSDKConstants.JSON_KEY_MEDIA_URL))); mmMediaItem.setShareMediaOnClickListener(new MMShareMediaOnClickListener(LocationDetailsMediaScreen.this)); mmStreamMediaItems.add(mmMediaItem); } streamAdapter = new MMMediaArrayAdapter(LocationDetailsMediaScreen.this, R.layout.listview_row_media, mmStreamMediaItems); lvStreamMedia.setAdapter(streamAdapter); } } /** * * @throws JSONException */ private void getVideoMediaItems() throws JSONException { if(retrieveVideoMedia) { for(int i = 0; i < videoMediaUrls.length(); i++) { JSONObject jObj = videoMediaUrls.getJSONObject(i); MMMediaItem mmMediaItem = new MMMediaItem(); MMImageLoaderAdapter.loadImage(new LoadVideoThumbnailCallback(i), getWindowManager().getDefaultDisplay(), jObj.getString(MMSDKConstants.JSON_KEY_THUMB_URL)); if(i == videoMediaUrls.length() - 1) { retrieveVideoMedia = false; } mmMediaItem.setExpiryDate(MMUtility.getExpiryDate(System.currentTimeMillis() - jObj.getLong(MMSDKConstants.JSON_KEY_UPLOADED_DATE))); mmMediaItem.setIsVideo(true); mmMediaItem.setPlayOnClickListener(new MMVideoPlayOnClickListener(LocationDetailsMediaScreen.this, jObj.getString(MMSDKConstants.JSON_KEY_MEDIA_URL))); mmMediaItem.setShareMediaOnClickListener(new MMShareMediaOnClickListener(LocationDetailsMediaScreen.this)); mmVideoMediaItems.add(mmMediaItem); } videoAdapter = new MMMediaArrayAdapter(LocationDetailsMediaScreen.this, R.layout.listview_row_media, mmVideoMediaItems); lvVideoMedia.setAdapter(videoAdapter); } } /** * * @throws JSONException */ private void getImageMediaItems() throws JSONException { if(retrieveImageMedia) { for(int i = 0; i < imageMediaUrls.length(); i++) { JSONObject jObj = imageMediaUrls.getJSONObject(i); MMImageLoaderAdapter.loadImage(new LoadImageCallback(i), getWindowManager().getDefaultDisplay(), jObj.getString(MMSDKConstants.JSON_KEY_MEDIA_URL)); MMMediaItem mmMediaItem = new MMMediaItem(); if(i == imageMediaUrls.length() - 1) { retrieveImageMedia = false; } mmMediaItem.setExpiryDate(MMUtility.getExpiryDate(System.currentTimeMillis() - jObj.getLong(MMSDKConstants.JSON_KEY_UPLOADED_DATE))); mmMediaItem.setIsImage(true); mmMediaItem.setShareMediaOnClickListener(new MMShareMediaOnClickListener(LocationDetailsMediaScreen.this)); mmImageMediaItems.add(mmMediaItem); } imageAdapter = new MMMediaArrayAdapter(LocationDetailsMediaScreen.this, R.layout.listview_row_media, mmImageMediaItems); lvImageMedia.setAdapter(imageAdapter); } } /** * * @author Dezapp, LLC * */ private class LoadStreamThumbnailCallback implements MMCallback { int mediaPosition; public LoadStreamThumbnailCallback(int mediaPosition) { this.mediaPosition = mediaPosition; } @Override public void processCallback(Object obj) { if(obj != null) { if(obj instanceof String) { if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) { Toast.makeText(LocationDetailsMediaScreen.this, getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show(); } } else if(obj instanceof Bitmap) { mmStreamMediaItems.get(mediaPosition).setImageMedia(ThumbnailUtils.extractThumbnail((Bitmap) obj, MMUtility.getImageMediaMeasuredWidth(LocationDetailsMediaScreen.this), MMUtility.getImageMediaMeasuredHeight(LocationDetailsMediaScreen.this))); mmStreamMediaItems.get(mediaPosition).setImageOnClickListener(new MMImageOnClickListener(LocationDetailsMediaScreen.this, (Bitmap) obj)); streamAdapter.notifyDataSetChanged(); } } } } /** * * @author Dezapp, LLC * */ private class LoadVideoThumbnailCallback implements MMCallback { int mediaPosition; public LoadVideoThumbnailCallback(int mediaPosition) { this.mediaPosition = mediaPosition; } @Override public void processCallback(Object obj) { if(obj != null) { if(obj instanceof String) { if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) { Toast.makeText(LocationDetailsMediaScreen.this, getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show(); } } else if(obj instanceof Bitmap) { mmVideoMediaItems.get(mediaPosition).setImageMedia(ThumbnailUtils.extractThumbnail((Bitmap) obj, MMUtility.getImageMediaMeasuredWidth(LocationDetailsMediaScreen.this), MMUtility.getImageMediaMeasuredHeight(LocationDetailsMediaScreen.this))); mmVideoMediaItems.get(mediaPosition).setImageOnClickListener(new MMImageOnClickListener(LocationDetailsMediaScreen.this, (Bitmap) obj)); videoAdapter.notifyDataSetChanged(); } } } } /** * Callback to display the image it retrieve from the mediaurl * @author Dezapp, LLC * */ private class LoadImageCallback implements MMCallback { int mediaPosition; public LoadImageCallback(int mediaPosition) { this.mediaPosition = mediaPosition; } @Override public void processCallback(Object obj) { if(obj != null) { if(obj instanceof String) { if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) { Toast.makeText(LocationDetailsMediaScreen.this, getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show(); } } else if(obj instanceof Bitmap) { mmImageMediaItems.get(mediaPosition).setImageMedia(ThumbnailUtils.extractThumbnail((Bitmap) obj, MMUtility.getImageMediaMeasuredWidth(LocationDetailsMediaScreen.this), MMUtility.getImageMediaMeasuredHeight(LocationDetailsMediaScreen.this))); mmImageMediaItems.get(mediaPosition).setImageOnClickListener(new MMImageOnClickListener(LocationDetailsMediaScreen.this, (Bitmap) obj)); imageAdapter.notifyDataSetChanged(); } } } } }