package com.abewy.android.apps.klyph.fragment; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.CheckedTextView; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; import com.abewy.android.apps.klyph.KlyphBundleExtras; import com.abewy.android.apps.klyph.R; import com.abewy.android.apps.klyph.app.FriendPickerActivity; import com.abewy.android.apps.klyph.core.fql.Album; import com.abewy.android.apps.klyph.core.fql.Attachment; import com.abewy.android.apps.klyph.core.fql.Friend; import com.abewy.android.apps.klyph.core.fql.Media; import com.abewy.android.apps.klyph.core.fql.Photo; import com.abewy.android.apps.klyph.core.fql.Stream; import com.abewy.android.apps.klyph.core.fql.Video; import com.abewy.android.apps.klyph.core.graph.GraphObject; import com.abewy.android.apps.klyph.core.imageloader.ImageLoader; import com.abewy.android.apps.klyph.core.request.RequestError; import com.abewy.android.apps.klyph.core.request.Response; import com.abewy.android.apps.klyph.core.util.AttrUtil; import com.abewy.android.apps.klyph.request.AsyncRequest; import com.abewy.android.apps.klyph.request.AsyncRequest.Query; public class PostShare extends Fragment implements OnItemSelectedListener { private static final int SELECT_FRIEND_CODE = 48563; private static final String ALBUM = "http://www.facebook.com/album.php?fbid="; private static final String PHOTO = "http://www.facebook.com/photo.php?fbid="; private static final String VIDEO = "http://www.facebook.com/photo.php?v="; private TextView linkName; private TextView linkDesc; private ImageView linkImage; private ProgressBar progress; private Spinner spinner; private String url; private String imageUrl; private boolean isLink = false; private int previousPosition; public PostShare() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_post_share, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.setBackgroundResource(AttrUtil.getResourceId(getActivity(), R.attr.actionBarStackedBackground)); linkName = (TextView) view.findViewById(R.id.name); linkDesc = (TextView) view.findViewById(R.id.desc); linkImage = (ImageView) view.findViewById(R.id.image); progress = (ProgressBar) view.findViewById(R.id.progress); spinner = (Spinner) view.findViewById(R.id.spinner); } public void initWithIntent(Intent intent) { String photoId = intent.getStringExtra(KlyphBundleExtras.SHARE_PHOTO_ID); String videoId = intent.getStringExtra(KlyphBundleExtras.SHARE_VIDEO_ID); String albumId = intent.getStringExtra(KlyphBundleExtras.SHARE_ALBUM_ID); Stream post = intent.getParcelableExtra(KlyphBundleExtras.SHARE_POST_ID); String linkUrl = intent.getStringExtra(KlyphBundleExtras.SHARE_LINK_URL); if (photoId != null) { url = PHOTO + photoId; new AsyncRequest(Query.PHOTO, photoId, "", new AsyncRequest.Callback() { @Override public void onComplete(Response response) { onPhotoRequestComplete(response); } }).execute(); } else if (videoId != null) { url = VIDEO + videoId; new AsyncRequest(Query.VIDEO, videoId, "", new AsyncRequest.Callback() { @Override public void onComplete(Response response) { onVideoRequestComplete(response); } }).execute(); } else if (albumId != null) { url = ALBUM + albumId; new AsyncRequest(Query.ALBUM, albumId, "", new AsyncRequest.Callback() { @Override public void onComplete(Response response) { onAlbumRequestComplete(response); } }).execute(); } else if (post != null) { url = post.getPermalink(); if (post.isStatus()) { fillViews(post.getActor_name(), post.getMessage(), post.getActor_pic()); getActivity().setTitle(R.string.post_share_status); } else { Attachment att = post.getAttachment(); if (att.isPhoto() || att.isVideo() || att.isAlbum()) { Media media = att.getMedia().get(0); if (att.isAlbum()) { fillViews(post.getActor_name(), att.getName(), media.getSrc()); } else { fillViews(post.getActor_name(), media.getAlt(), media.getSrc()); } if (att.isPhoto()) getActivity().setTitle(R.string.post_share_photo); else if (att.isVideo()) getActivity().setTitle(R.string.post_share_video); else getActivity().setTitle(R.string.post_share_album); } else { getActivity().setTitle(R.string.post_share_status); fillViews(post.getActor_name(), post.getMessage(), post.getActor_pic()); } } } else if (linkUrl != null) { isLink = true; url = linkUrl; imageUrl = intent.getStringExtra(KlyphBundleExtras.SHARE_LINK_IMAGE_URL); String linkName = intent.getStringExtra(KlyphBundleExtras.SHARE_LINK_NAME); String linkDesc = intent.getStringExtra(KlyphBundleExtras.SHARE_LINK_DESC); fillViews(linkName, linkDesc, imageUrl); getActivity().setTitle(R.string.post_share_link); } else { Log.d("PostShare", "All null"); } if (isLink == false) { ((ViewGroup) spinner.getParent()).setVisibility(View.GONE); } else { SpinnerAdapter adapter = new SpinnerAdapter(getActivity()); spinner.setAdapter(adapter); Friend friend = new Friend(); friend.setName(getString(R.string.post_share_on_my_wall)); adapter.add(friend); friend = new Friend(); friend.setName(getString(R.string.post_share_on_friend_wall)); adapter.add(friend); adapter.notifyDataSetChanged(); spinner.setSelection(0); spinner.setOnItemSelectedListener(this); previousPosition = 0; } } private void onPhotoRequestComplete(final Response response) { if (getActivity() != null) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { if (response.getError() == null) { onPhotoRequestSuccess(response.getGraphObjectList()); } else { onPhotoRequestError(response.getError()); } } }); } } private void onPhotoRequestSuccess(List<GraphObject> result) { if (result.size() > 0) { Photo photo = (Photo) result.get(0); fillViews(photo.getAlbum_name(), photo.getOwner_name(), photo.getSrc()); } else { displayError("Photo list size = 0"); } } private void onPhotoRequestError(RequestError error) { displayError(error.getMessage()); } private void onVideoRequestComplete(final Response response) { if (getActivity() != null) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { if (response.getError() == null) { onVideoRequestSuccess(response.getGraphObjectList()); } else { onVideoRequestError(response.getError()); } } }); } } private void onVideoRequestSuccess(List<GraphObject> result) { if (result.size() > 0) { Video video = (Video) result.get(0); fillViews(video.getAlbum_name(), video.getOwner_name(), video.getThumbnail_link()); } else { displayError("Video list size = 0"); } } private void onVideoRequestError(RequestError error) { displayError(error.getMessage()); } private void onAlbumRequestComplete(final Response response) { if (getActivity() != null) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { if (response.getError() == null) { onAlbumRequestSuccess(response.getGraphObjectList()); } else { onAlbumRequestError(response.getError()); } } }); } } private void onAlbumRequestSuccess(List<GraphObject> result) { if (result.size() > 0) { Album album = (Album) result.get(0); fillViews(album.getName(), album.getOwner_name(), album.getCover_images().get(0).getSource()); } else { displayError("Album list size = 0"); } } private void onAlbumRequestError(RequestError error) { displayError(error.getMessage()); } private void displayError(String error) { Log.d("PostShare", "Error " + error); } private void fillViews(String name, String desc, String imageUrl) { if (getView() != null && getActivity() != null) { linkName.setText(name); linkDesc.setText(desc); ImageLoader.display(linkImage, imageUrl, true, AttrUtil.getResourceId(getActivity(), R.attr.squarePlaceHolderIcon)); linkName.setVisibility(View.VISIBLE); linkDesc.setVisibility(View.VISIBLE); linkImage.setVisibility(View.VISIBLE); progress.setVisibility(View.GONE); } } public Bundle getParams() { Bundle bundle = new Bundle(); bundle.putString("link", url); if (isLink == true) { bundle.putString("name", linkName.getText().toString()); bundle.putString("description", linkDesc.getText().toString()); if (spinner.getSelectedItemPosition() > 1) { bundle.putString("to", ((Friend) spinner.getSelectedItem()).getUid()); } else { bundle.putString("picture", imageUrl); } } return bundle; } public boolean isFriendShare() { return spinner.getSelectedItemPosition() > 1; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SELECT_FRIEND_CODE) { if (resultCode == Activity.RESULT_OK) { Friend friend = new Friend(); friend.setUid(data.getStringExtra(KlyphBundleExtras.USER_ID)); friend.setName(data.getStringExtra(KlyphBundleExtras.USER_NAME)); SpinnerAdapter adapter = (SpinnerAdapter) spinner.getAdapter(); int position = -1; for (int i = 2; i < adapter.getCount(); i++) { if (adapter.getItem(i).getUid().equals(friend.getUid())) { position = i; break; } } if (position == -1) { adapter.add(friend); adapter.notifyDataSetChanged(); position = adapter.getCount() - 1; } spinner.setSelection(position); } else { spinner.setSelection(previousPosition); } } } private static class SpinnerAdapter extends BaseAdapter { private LayoutInflater inflater; private List<Friend> friends; public SpinnerAdapter(Context context) { this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); friends = new ArrayList<Friend>(); } public void add(Friend friend) { friends.add(friend); } @Override public int getCount() { return friends.size(); } @Override public Friend getItem(int index) { return friends.get(index); } @Override public long getItemId(int index) { return index; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false); } CheckedTextView ct = (CheckedTextView) convertView.findViewById(android.R.id.text1); ct.setText(getItem(position).getName()); return convertView; } } @Override public void onItemSelected(AdapterView<?> Spinner, View arg1, int position, long arg3) { if (position == 1) { Intent intent = new Intent(getActivity(), FriendPickerActivity.class); intent.putExtra(KlyphBundleExtras.SINGLE_CHOICE, true); startActivityForResult(intent, SELECT_FRIEND_CODE); } else { previousPosition = position; } } @Override public void onNothingSelected(AdapterView<?> arg0) { } @Override public void onDestroy() { super.onDestroy(); linkName = null; linkDesc = null; linkImage = null; progress = null; spinner = null; } }