package com.buddycloud; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.media.ThumbnailUtils; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.Toast; import com.buddycloud.customviews.MeasuredMediaView; import com.buddycloud.customviews.MeasuredMediaView.MeasureListener; import com.buddycloud.fragments.GenericChannelsFragment; import com.buddycloud.fragments.SearchChannelsFragment; import com.buddycloud.model.MediaModel; import com.buddycloud.model.ModelCallback; import com.buddycloud.model.PostsModel; import com.buddycloud.model.SubscribedChannelsModel; import com.buddycloud.preferences.Preferences; import com.buddycloud.utils.AvatarUtils; import com.buddycloud.utils.FileUtils; import com.buddycloud.utils.ImageHelper; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; public class ShareActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share); final Intent intent = getIntent(); if (!intent.getAction().equals(Intent.ACTION_SEND)) { return; } String myJid = Preferences.getPreference(getApplicationContext(), Preferences.MY_CHANNEL_JID); EditText targetChannelView = (EditText) findViewById(R.id.channelText); String avatarURL = AvatarUtils.avatarURL(this, myJid); ImageView avatarView = (ImageView) findViewById(R.id.bcProfilePic); DisplayImageOptions dio = new DisplayImageOptions.Builder() .cloneFrom(ImageHelper.defaultImageOptions()) .showImageOnFail(R.drawable.personal_50px) .showImageOnLoading(R.drawable.personal_50px) .preProcessor(ImageHelper.createRoundProcessor(16, false, -1)) .build(); ImageLoader.getInstance().displayImage(avatarURL, avatarView, dio); targetChannelView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { Intent searchActivityIntent = new Intent(); searchActivityIntent.setClass(ShareActivity.this, SearchActivity.class); searchActivityIntent.putExtra(SearchChannelsFragment.AFFILIATIONS, new String[] { SubscribedChannelsModel.ROLE_OWNER, SubscribedChannelsModel.ROLE_MODERATOR, SubscribedChannelsModel.ROLE_PUBLISHER}); startActivityForResult(searchActivityIntent, SearchActivity.REQUEST_CODE); } return true; } }); final String mediaType = intent.getType(); if (mediaType.contains("image/")) { layoutShareImage(); } else if (mediaType.contains("video/")) { layoutShareVideo(); } else if (mediaType.contains("text/")) { layoutShareText(); } RelativeLayout shareMediaBtn = (RelativeLayout) findViewById(R.id.shareMediaBtn); shareMediaBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mediaType.contains("image/") || mediaType.contains("video/")) { shareMedia(); } else if (mediaType.contains("text/")) { shareText(); } } }); } @Override protected void onResume() { super.onResume(); ImageLoader.getInstance().resume(); } @Override protected void onStop() { super.onStop(); ImageLoader.getInstance().stop(); } protected void layoutShareText() { findViewById(R.id.shareImagePreview).setVisibility(View.GONE); findViewById(R.id.captionTextAlt).setVisibility(View.GONE); EditText caption = (EditText) findViewById(R.id.captionText); String sharedText = getIntent().getStringExtra(Intent.EXTRA_TEXT); caption.setText(sharedText); findViewById(R.id.captionText).requestFocus(); } protected void layoutShareVideo() { findViewById(R.id.captionText).setVisibility(View.GONE); Uri uri = (Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM); final Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail( FileUtils.getRealPathFromURI(this, uri), MediaStore.Images.Thumbnails.MINI_KIND); final MeasuredMediaView imageView = (MeasuredMediaView) findViewById(R.id.shareImagePreview); imageView.setImageBitmap(thumbnail); imageView.setMeasureListener(new MeasureListener() { @Override public void measure(int widthMeasureSpec, int heightMeasureSpec) { imageView.setImageBitmap(ImageHelper.getRoundedCornerBitmap( thumbnail, 8, true, widthMeasureSpec)); } }); findViewById(R.id.captionTextAlt).requestFocus(); imageView.setVisibility(View.VISIBLE); } protected void layoutShareImage() { findViewById(R.id.captionText).setVisibility(View.GONE); final MeasuredMediaView imageView = (MeasuredMediaView) findViewById(R.id.shareImagePreview); final Uri uri = (Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM); imageView.setMeasureListener(new MeasureListener() { @Override public void measure(int widthMeasureSpec, int heightMeasureSpec) { DisplayImageOptions dio = new DisplayImageOptions.Builder() .cloneFrom(ImageHelper.defaultImageOptions()) .preProcessor(ImageHelper.createRoundProcessor(8, true, widthMeasureSpec)) .build(); ImageLoader.getInstance().displayImage(uri.toString(), imageView, dio); } }); findViewById(R.id.captionTextAlt).requestFocus(); imageView.setVisibility(View.VISIBLE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SearchActivity.REQUEST_CODE) { if (data != null) { final String channelJid = data.getStringExtra(GenericChannelsFragment.CHANNEL); EditText targetChannelView = (EditText) findViewById(R.id.channelText); targetChannelView.setText(channelJid); } } } protected void shareText() { showProgress(); postToBuddycloud(); } protected void shareMedia() { Uri uri = (Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM); showProgress(); Toast.makeText(getApplicationContext(), getString(R.string.message_media_uploading), Toast.LENGTH_SHORT).show(); EditText targetChannelView = (EditText) findViewById(R.id.channelText); MediaModel.getInstance().save(getApplicationContext(), null, new ModelCallback<JSONObject>() { @Override public void success(JSONObject response) { Toast.makeText(getApplicationContext(), getString(R.string.message_media_uploaded), Toast.LENGTH_SHORT).show(); postToBuddycloud(response.optString("entityId"), response.optString("id")); } @Override public void error(Throwable throwable) { Toast.makeText(getApplicationContext(), getString(R.string.message_media_upload_failed), Toast.LENGTH_LONG).show(); hideProgress(); } }, uri.toString(), targetChannelView.getText().toString()); } protected void showProgress() { findViewById(R.id.shareMediaBtn).setVisibility(View.GONE); findViewById(R.id.uploadProgress).setVisibility(View.VISIBLE); } protected void hideProgress() { findViewById(R.id.shareMediaBtn).setVisibility(View.VISIBLE); findViewById(R.id.uploadProgress).setVisibility(View.GONE); } protected void postToBuddycloud() { postToBuddycloud(null, null); } protected void postToBuddycloud(String picChannel, String picId) { EditText targetChannelView = (EditText) findViewById(R.id.channelText); JSONObject post = null; try { post = createPost(picChannel, picId); } catch (JSONException e) { // Toast.makeText(getApplicationContext(), // getString(R.string.message_post_creation_failed), // Toast.LENGTH_LONG).show(); // hideProgress(); return; } PostsModel.getInstance().save(this, post, new ModelCallback<JSONObject>() { @Override public void success(JSONObject response) { // Toast.makeText(getApplicationContext(), // getString(R.string.message_post_created), // Toast.LENGTH_LONG).show(); // finish(); } @Override public void error(Throwable throwable) { // Toast.makeText(getApplicationContext(), // getString(R.string.message_post_creation_failed), // Toast.LENGTH_LONG).show(); // hideProgress(); } }, targetChannelView.getText().toString()); } private JSONObject createPost(String picChannel, String picId) throws JSONException { JSONObject post = new JSONObject(); if (picId != null && picChannel != null) { EditText caption = (EditText) findViewById(R.id.captionTextAlt); post.putOpt("content", caption.getText().toString()); JSONArray mediaArray = new JSONArray(); JSONObject mediaObject = new JSONObject(); mediaObject.putOpt("id", picId); mediaObject.putOpt("channel", picChannel); mediaArray.put(mediaObject); post.putOpt("media", mediaArray); } else { EditText caption = (EditText) findViewById(R.id.captionText); post.putOpt("content", caption.getText().toString()); } return post; } @Override public boolean onCreateOptionsMenu(Menu menu) { return true; } }