package com.abewy.android.apps.klyph.app;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.TextView;
import android.widget.Toast;
import com.abewy.android.apps.klyph.KlyphBundleExtras;
import com.abewy.android.apps.klyph.KlyphData;
import com.abewy.android.apps.klyph.KlyphPreferences;
import com.abewy.android.apps.klyph.R;
import com.abewy.android.apps.klyph.core.KlyphSession;
import com.abewy.android.apps.klyph.core.fql.FriendList;
import com.abewy.android.apps.klyph.core.fql.Tag;
import com.abewy.android.apps.klyph.core.graph.GraphObject;
import com.abewy.android.apps.klyph.core.graph.GraphType;
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.request.BaseAsyncRequest.Callback;
import com.abewy.android.apps.klyph.core.util.AlertUtil;
import com.abewy.android.apps.klyph.core.util.AttrUtil;
import com.abewy.android.apps.klyph.facebook.IFbPermissionCallback;
import com.abewy.android.apps.klyph.fragment.PostAlbums;
import com.abewy.android.apps.klyph.fragment.PostLink;
import com.abewy.android.apps.klyph.fragment.PostLink.PostLinkListener;
import com.abewy.android.apps.klyph.fragment.PostPhotos;
import com.abewy.android.apps.klyph.fragment.PostPhotos.PostPhotoListener;
import com.abewy.android.apps.klyph.fragment.PostShare;
import com.abewy.android.apps.klyph.fragment.UserListDialog;
import com.abewy.android.apps.klyph.request.AsyncRequest;
import com.abewy.android.apps.klyph.request.AsyncRequest.Query;
import com.abewy.android.apps.klyph.service.UploadPhotoService;
import com.abewy.android.apps.klyph.util.TextViewUtil;
import com.abewy.android.apps.klyph.util.TextViewUtil.TagCallback;
import com.facebook.FacebookException;
import com.facebook.Session;
import com.facebook.widget.WebDialog;
public class PostActivity extends TitledFragmentActivity implements PostPhotoListener, PostLinkListener, IFbPermissionCallback
{
private enum Privacy
{
EVERYONE,
ALL_FRIENDS,
SELF,
CUSTOM
}
private final int GALLERY = 0;
private final int FRIEND_PICKER = 1;
private final int PLACE_PICKER = 2;
private static final List<String> PERMISSIONS = Arrays.asList("read_mailbox", "publish_stream", "publish_actions"/*
* ,
* "photo_upload",
* "status_update",
* "share_item"
*/);
private final int DUPLICATE_MESSAGE_CODE = 506;
private TextView messageTextView;
private TextView friendsTextView;
private TextView placeTextView;
private ImageButton friendsButton;
private ImageButton privacyButton;
private ImageButton photosButton;
private ImageButton placeButton;
private ImageButton linkButton;
private PostPhotos photosFragment;
private PostAlbums albumsFragment;
private PostLink linkFragment;
private PostShare shareFragment;
private Privacy privacy = Privacy.SELF;
private Map<String, String> friends;
private String placeId;
private ArrayList<String> photoUris;
private boolean isEventMessage = false;
private boolean isPageMessage = false;
private boolean isGroupMessage = false;
private boolean pendingAnnounce = false;
private int numTry = 0;
private boolean linkFragmentVisible = false;
private boolean shareFragmentVisible = false;
private String elementId;
private List<GraphObject> friendLists;
private String privacyFriendListId;
private TagCallback friendCallback = new TagCallback() {
@Override
public void onTagClick(List<Tag> tags)
{
Tag tag = tags.get(0);
if (tag.getId().length() == 0)
{
List<Tag> users = new ArrayList<Tag>();
for (Iterator<String> iterator = friends.keySet().iterator(); iterator
.hasNext();)
{
String key = (String) iterator.next();
Tag t = new Tag();
t.setId(key);
t.setName(friends.get(key));
t.setType(GraphType.FQL_USER.toString());
users.add(t);
}
UserListDialog dialog = new UserListDialog();
dialog.loadList(users);
dialog.setCustomTitle(R.string.friends);
dialog.show(getFragmentManager(), "poststatusDialog");
}
else
{
TextViewUtil.onTagClick(PostActivity.this, tags);
}
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent.getStringExtra(KlyphBundleExtras.EVENT_ID) != null)
{
elementId = intent.getStringExtra(KlyphBundleExtras.EVENT_ID);
isEventMessage = true;
}
else if (intent.getStringExtra(KlyphBundleExtras.PAGE_ID) != null)
{
elementId = intent.getStringExtra(KlyphBundleExtras.PAGE_ID);
isPageMessage = true;
}
else if (intent.getStringExtra(KlyphBundleExtras.GROUP_ID) != null)
{
elementId = intent.getStringExtra(KlyphBundleExtras.GROUP_ID);
isGroupMessage = true;
}
else
{
elementId = KlyphSession.getSessionUserId();
}
Log.d("PostActivity", "event " + isEventMessage + " page " + isPageMessage + " group " + isGroupMessage);
boolean shareLink = intent.getBooleanExtra(KlyphBundleExtras.SHARE, false);
String action = intent.getAction();
String type = intent.getType();
setTitle(isEventMessage == false ? R.string.publish_new_status : R.string.publish_new_event_message);
photoUris = new ArrayList<String>();
messageTextView = (TextView) findViewById(R.id.message_textview);
friendsTextView = (TextView) findViewById(R.id.friends_textview);
placeTextView = (TextView) findViewById(R.id.place_textview);
photosFragment = (PostPhotos) getFragmentManager().findFragmentById(R.id.photos_fragment);
albumsFragment = (PostAlbums) getFragmentManager().findFragmentById(R.id.albums_fragment);
linkFragment = (PostLink) getFragmentManager().findFragmentById(R.id.link_fragment);
shareFragment = (PostShare) getFragmentManager().findFragmentById(R.id.share_fragment);
getFragmentManager().beginTransaction().hide(photosFragment).commitAllowingStateLoss();
getFragmentManager().beginTransaction().hide(albumsFragment).commitAllowingStateLoss();
getFragmentManager().beginTransaction().hide(linkFragment).commitAllowingStateLoss();
if (shareLink == true)
{
shareFragment.initWithIntent(getIntent());
shareFragmentVisible = true;
}
else
{
getFragmentManager().beginTransaction().hide(shareFragment).commit();
}
if (isEventMessage == true)
{
LinearLayout buttonBar = (LinearLayout) findViewById(R.id.button_bar);
buttonBar.setVisibility(View.GONE);
}
else
{
ImageButton placeDeleteButton = (ImageButton) findViewById(R.id.place_delete_button);
ImageButton friendsDeleteButton = (ImageButton) findViewById(R.id.friends_delete_button);
friendsButton = (ImageButton) findViewById(R.id.friends_button);
photosButton = (ImageButton) findViewById(R.id.picture_button);
placeButton = (ImageButton) findViewById(R.id.place_button);
linkButton = (ImageButton) findViewById(R.id.link_button);
privacyButton = (ImageButton) findViewById(R.id.privacy_button);
placeDeleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
clearPlace();
updateButtonStatus();
}
});
friendsDeleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
clearFriends();
updateButtonStatus();
}
});
friendsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent(PostActivity.this, FriendPickerActivity.class);
if (friends != null && friends.size() > 0)
{
ArrayList<String> ids = new ArrayList<String>();
ids.addAll(friends.keySet());
intent.putStringArrayListExtra(KlyphBundleExtras.FRIEND_PICKER_IDS, ids);
}
startActivityForResult(intent, FRIEND_PICKER);
}
});
photosButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
startGallery();
}
});
placeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
startActivityForResult(new Intent(PostActivity.this, PlacePickerActivity.class), PLACE_PICKER);
}
});
linkButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
linkFragment.reset();
getFragmentManager().beginTransaction().show(linkFragment).commitAllowingStateLoss();
linkFragmentVisible = true;
updateButtonStatus();
}
});
setPrivacyListenerApi11();
setPrivacy(KlyphPreferences.getPrivacy());
if (Intent.ACTION_SEND.equals(action) && type != null)
{
displayBackArrow(false);
setAppIconBackToHomeEnabled(false);
if ("text/plain".equals(type))
{
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
String sharedSubject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
if (sharedText != null)
{
boolean isUrl = false;
try
{
new URL(sharedText);
isUrl = true;
}
catch (MalformedURLException e)
{
isUrl = false;
}
if (isUrl == true)
{
linkFragment.setUrl(sharedText);
linkFragment.setTitle(sharedSubject);
getFragmentManager().beginTransaction().show(linkFragment).commitAllowingStateLoss();
}
else
{
messageTextView.setText(sharedText);
}
}
}
else if (type.startsWith("image/"))
{
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null)
{
// Update UI to reflect image being shared
photoUris = new ArrayList<String>();
if (StringUtils.startsWith(imageUri.toString(), "content://"))
{
photoUris.add(getRealPathFromURI(imageUri));
}
else
{
photoUris.add(imageUri.getPath());
}
photosFragment.setImages(photoUris);
getFragmentManager().beginTransaction().show(photosFragment).commitAllowingStateLoss();
photosFragment.updateLayout();
}
}
}
else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null)
{
displayBackArrow(false);
setAppIconBackToHomeEnabled(false);
if (type.startsWith("image/"))
{
ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageUris != null)
{
// Update UI to reflect multiple images being shared
photoUris = new ArrayList<String>();
for (Uri uri : imageUris)
{
if (StringUtils.startsWith(uri.toString(), "content://"))
{
photoUris.add(getRealPathFromURI(uri));
}
else
{
photoUris.add(uri.getPath());
}
}
photosFragment.setImages(photoUris);
getFragmentManager().beginTransaction().show(photosFragment).commitAllowingStateLoss();
photosFragment.updateLayout();
}
}
}
else
{
Log.d("PostActivity", "Received other");
}
updateButtonStatus();
privacyButton.setVisibility(isGroupMessage == true || isEventMessage == true ? View.GONE : View.VISIBLE);
}
if (KlyphData.getFriendLists() == null)
{
new AsyncRequest(Query.FRIEND_LISTS, "", "", new Callback() {
@Override
public void onComplete(Response response)
{
onRequestComplete(response);
}
}).execute();
}
}
private boolean isSessionUser()
{
return elementId != null && elementId.equals(KlyphSession.getSessionUserId());
}
private String getRealPathFromURI(Uri contentUri)
{
// can post image
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(contentUri, proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
@TargetApi(11)
private void setPrivacyListenerApi11()
{
privacyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
PopupMenu popup = new PopupMenu(PostActivity.this, v);
android.view.MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.privacy, popup.getMenu());
if (friendLists == null)
friendLists = KlyphData.getFriendLists();
if (friendLists != null)
{
for (GraphObject friendList : friendLists)
{
popup.getMenu().add(((FriendList) friendList).getName());
}
}
popup.setOnMenuItemClickListener(new PopupMenuListener());
popup.show();
}
});
}
private void setPrivacy(int privacy)
{
switch (privacy)
{
case 0:
setPrivacy(Privacy.EVERYONE);
break;
case 1:
setPrivacy(Privacy.ALL_FRIENDS);
break;
case 2:
setPrivacy(Privacy.SELF);
break;
}
}
private void setPrivacy(Privacy privacy)
{
this.privacy = privacy;
// set changes
switch (privacy)
{
case EVERYONE:
{
privacyButton.setImageDrawable(AttrUtil.getDrawable(this, R.attr.privacyPublicIcon));
KlyphPreferences.setPrivacy(0);
break;
}
case ALL_FRIENDS:
{
privacyButton.setImageDrawable(AttrUtil.getDrawable(this, R.attr.privacyFriendsIcon));
KlyphPreferences.setPrivacy(1);
break;
}
case SELF:
{
privacyButton.setImageDrawable(AttrUtil.getDrawable(this, R.attr.privacySelfIcon));
KlyphPreferences.setPrivacy(2);
break;
}
case CUSTOM:
{
privacyButton.setImageDrawable(AttrUtil.getDrawable(this, R.attr.privacyCustomIcon));
break;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.send, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == R.id.menu_send)
{
if (photoUris.size() > 0 || shareFragment.isVisible())
{
handlePublishPost();
}
else if (linkFragment.isVisible())
{
if (linkFragment.checkEntries())
{
handlePublishPost();
}
}
else if (messageTextView.getText() == null || messageTextView.getText().length() == 0)
{
AlertUtil.showAlert(this, R.string.error, R.string.please_enter_message, R.string.ok);
}
else if (friends != null && friends.size() > 0 && (placeId == null || placeId.length() == 0))
{
AlertUtil.showAlert(this, R.string.error, R.string.must_select_place_to_tag_friends, R.string.ok);
}
else
{
handlePublishPost();
}
return true;
}
return super.onOptionsItemSelected(item);
}
private void publishPost()
{
Log.d("PostActivity", "Publish post try " + numTry);
Log.d("PostActivity", "Publish post privacy " + privacy.toString());
if (photoUris.size() > 0)
{
publishPhotos();
}
else if (shareFragment.isVisible())
{
Bundle params = shareFragment.getParams();
setPrivacyParams(params);
// params.putString("privacy", "{'value':'" + privacy.toString() + "'}");
if (shareFragment.isFriendShare())
{
WebDialog dialog = new WebDialog.FeedDialogBuilder(this, Session.getActiveSession(), params).build();
dialog.setOnCompleteListener(new WebDialog.OnCompleteListener() {
@Override
public void onComplete(Bundle values, FacebookException error)
{
if (error == null)
{
// When the story is posted, close activity
final String postId = values.getString("post_id");
if (postId != null)
{
finish();
}
}
}
});
dialog.show();
}
else
{
params.putString("message", messageTextView.getText().toString());
sendRequest(Query.POST_STATUS, elementId, params);
}
}
else if (linkFragment.isVisible())
{
Bundle params = linkFragment.getParams();
params.putString("message", messageTextView.getText().toString());
if (isGroupMessage == false)
setPrivacyParams(params);
// params.putString("privacy", "{'value':'" + privacy.toString() + "'}");
sendRequest(Query.POST_STATUS, elementId, params);
}
else
{
Bundle params = new Bundle();
params.putString("message", messageTextView.getText().toString());
// params.putString("message",
// "Test with Happy @[1320153319:Mickael Gbd]!");
// params.putString("message", "Test with Happy Mickael Gbd !");
// params.putString("message_tags",
// "[{\"id\":\"1320153319\", \"name\":\"Mickael Gbd\", \"length\":11, \"offset\":16}]");
// params.putString("tags",
// "[{\"tag_uid\":\"1320153319\", \"length\":10, \"offset\":2}]");
if (placeId != null && placeId != "")
{
params.putString("place", placeId);
if (friends != null && friends.size() > 0)
{
StringBuilder ids = new StringBuilder();
for (String key : friends.keySet())
{
ids.append(key).append(",");
}
params.putString("tags", ids.substring(0, ids.length() - 1));
}
}
if (isEventMessage == false && isGroupMessage == false && isPageMessage == false)
{
setPrivacyParams(params);
// params.putString("privacy", "{'value':'" + privacy.toString() + "'}");
}
sendRequest(Query.POST_STATUS, elementId, params);
}
}
private void setPrivacyParams(Bundle params)
{
params.putString("privacy", getPrivacyParam());
}
private String getPrivacyParam()
{
JSONObject json = new JSONObject();
try
{
json.putOpt("value", privacy.toString());
}
catch (JSONException e)
{
e.printStackTrace();
}
if (privacyFriendListId != null)
{
try
{
json.put("allow", privacyFriendListId);
json.put("deny", "");
}
catch (JSONException e)
{
e.printStackTrace();
}
}
return json.toString();
}
private AlertDialog dialog;
private void sendRequest(int query, String id, Bundle params)
{
if (dialog == null)
{
dialog = AlertUtil.showAlert(this, R.string.status, R.string.publishing);
dialog.setCancelable(false);
}
new AsyncRequest(query, id, params, new AsyncRequest.Callback() {
@Override
public void onComplete(Response response)
{
onRequestResponse(response);
}
}).execute();
}
private void publishPhotos()
{
String album = elementId;
if (!(isPageMessage || isEventMessage || isGroupMessage))
{
String albumId = albumsFragment.getSelectedAlbum();
if (albumId == null)
album = elementId;
else
album = albumId;
}
Intent intent = new Intent(this, UploadPhotoService.class);
intent.putStringArrayListExtra(KlyphBundleExtras.UPLOAD_PHOTO_URIS, photoUris);
intent.putExtra(KlyphBundleExtras.UPLOAD_PHOTO_CAPTION, messageTextView.getText().toString());
intent.putExtra(KlyphBundleExtras.UPLOAD_PHOTO_PLACE, placeId);
intent.putExtra(KlyphBundleExtras.UPLOAD_PHOTO_PRIVACY, getPrivacyParam());
intent.putExtra(KlyphBundleExtras.UPLOAD_PHOTO_ALBUM, album);
if (friends != null && friends.size() > 0)
{
ArrayList<String> friendIds = new ArrayList<String>();
for (String id : friends.keySet())
{
friendIds.add(id);
}
intent.putStringArrayListExtra(KlyphBundleExtras.UPLOAD_PHOTO_TAGS, friendIds);
}
startService(intent);
setResult(RESULT_OK);
finish();
}
private void onRequestResponse(Response response)
{
if (response.getError() == null)
{
if (dialog != null)
{
dialog.dismiss();
dialog = null;
}
Toast.makeText(getApplication(),
isEventMessage == false ? R.string.status_successfully_published : R.string.message_successfully_published, Toast.LENGTH_LONG)
.show();
setResult(RESULT_OK);
finish();
}
else
{
numTry++;
if (numTry < 3)
{
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run()
{
publishPost();
}
}, 1500);
}
else
{
if (dialog != null)
{
dialog.dismiss();
dialog = null;
}
int errorRes = isEventMessage == false ? R.string.publish_unknown_error : R.string.publish_message_unknown_error;
if (isEventMessage == false && response.getError().getErrorCode() == DUPLICATE_MESSAGE_CODE)
{
errorRes = R.string.publish_error_duplicate_message;
}
AlertUtil.showAlert(PostActivity.this, R.string.error, errorRes, R.string.ok);
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == GALLERY)
{
if (resultCode == RESULT_OK)
{
photoUris = data.getStringArrayListExtra(KlyphBundleExtras.PHOTO_LIST_URI);
if (photoUris == null)
{
photoUris = new ArrayList<String>();
}
}
}
else if (requestCode == FRIEND_PICKER)
{
if (resultCode == RESULT_OK)
{
friends = new HashMap<String, String>();
String[] names = data.getStringArrayExtra(KlyphBundleExtras.FRIEND_PICKER_NAMES);
String[] ids = data.getStringArrayExtra(KlyphBundleExtras.FRIEND_PICKER_IDS);
for (int i = 0; i < ids.length; i++)
{
friends.put(ids[i], names[i]);
}
updateSelectedFriends();
}
}
else if (requestCode == PLACE_PICKER)
{
if (resultCode == RESULT_OK)
{
placeId = data.getStringExtra(KlyphBundleExtras.PLACE_ID);
String placeName = data.getStringExtra(KlyphBundleExtras.PLACE_NAME);
placeTextView.setText(getString(R.string.at_place, placeName));
((View) placeTextView.getParent()).setVisibility(View.VISIBLE);
TextViewUtil.setElementClickable(this, placeTextView, placeName, placeId, GraphType.FQL_PAGE.toString(), true);
}
}
updateButtonStatus();
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (photosFragment != null)
{
photosFragment.updateLayout();
}
}
private void clearPlace()
{
placeId = null;
placeTextView.setText("");
((View) placeTextView.getParent()).setVisibility(View.GONE);
}
private void clearFriends()
{
friends = null;
friendsTextView.setText("");
((View) friendsTextView.getParent()).setVisibility(View.GONE);
}
private void updateSelectedFriends()
{
if (friends.size() > 0)
{
String firstName = "";
String firstId = "";
Iterator<String> it = friends.values().iterator();
Iterator<String> it2 = friends.keySet().iterator();
firstName = it.next();
firstId = it2.next();
for (String name : friends.values())
{
firstName = name;
break;
}
if (friends.size() > 2)
{
int size = friends.size() - 1;
friendsTextView.setText(getString(R.string.post_with_several_friends, firstName, size));
TextViewUtil.setElementClickable(this, friendsTextView, firstName, firstId, GraphType.FQL_USER.name(), friendCallback, true);
TextViewUtil.setElementClickable(this, friendsTextView, getString(R.string.with_several_friends, size), "", "", friendCallback, true);
}
else if (friends.size() > 1)
{
String secondName = it.next();
String secondId = it2.next();
friendsTextView.setText(getString(R.string.post_with_two_friends, firstName, secondName));
TextViewUtil.setElementClickable(this, friendsTextView, firstName, firstId, GraphType.FQL_USER.name(), friendCallback, true);
TextViewUtil.setElementClickable(this, friendsTextView, secondName, secondId, GraphType.FQL_USER.name(), friendCallback, true);
}
else
{
friendsTextView.setText(getString(R.string.post_with_one_friend, firstName));
TextViewUtil.setElementClickable(this, friendsTextView, firstName, firstId, GraphType.FQL_USER.name(), friendCallback, true);
}
((View) friendsTextView.getParent()).setVisibility(View.VISIBLE);
}
else
{
friendsTextView.setText("");
((View) friendsTextView.getParent()).setVisibility(View.GONE);
}
}
@Override
protected int getLayout()
{
return R.layout.activity_post;
}
@TargetApi(11)
private class PopupMenuListener implements OnMenuItemClickListener
{
@Override
public boolean onMenuItemClick(android.view.MenuItem item)
{
if (item.getItemId() == R.id.privacy_public)
{
setPrivacy(Privacy.EVERYONE);
privacyFriendListId = null;
return true;
}
else if (item.getItemId() == R.id.privacy_friends)
{
setPrivacy(Privacy.ALL_FRIENDS);
privacyFriendListId = null;
return true;
}
else if (item.getItemId() == R.id.privacy_self)
{
setPrivacy(Privacy.SELF);
privacyFriendListId = null;
return true;
}
else
{
setPrivacy(Privacy.CUSTOM);
String flName = (String) item.getTitle();
for (GraphObject friendList : friendLists)
{
FriendList fl = (FriendList) friendList;
if (flName.equals(fl.getName()))
{
privacyFriendListId = fl.getFlid();
break;
}
}
}
return false;
}
}
@Override
protected void onResumeFragments()
{
if (photoUris.size() > 0)
{
photosFragment.setImages(photoUris);
photosFragment.updateLayout();
getFragmentManager().beginTransaction().show(photosFragment).commitAllowingStateLoss();
if (isSessionUser())
getFragmentManager().beginTransaction().show(albumsFragment).commitAllowingStateLoss();
}
else
{
getFragmentManager().beginTransaction().hide(photosFragment).commitAllowingStateLoss();
getFragmentManager().beginTransaction().hide(albumsFragment).commitAllowingStateLoss();
}
super.onResumeFragments();
}
@Override
public void onPostPhotosItemClick()
{
startGallery();
}
private void startGallery()
{
Intent intent = new Intent(PostActivity.this, GalleryActivity.class);
intent.putStringArrayListExtra(KlyphBundleExtras.PHOTO_LIST_URI, photoUris);
startActivityForResult(intent, GALLERY);
}
@Override
public void onPostPhotosDeleteClick()
{
photoUris = new ArrayList<String>();
getFragmentManager().beginTransaction().hide(photosFragment).commitAllowingStateLoss();
getFragmentManager().beginTransaction().hide(albumsFragment).commitAllowingStateLoss();
updateButtonStatus();
}
@Override
public void onPostLinkDeleteClick()
{
getFragmentManager().beginTransaction().hide(linkFragment).commitAllowingStateLoss();
linkFragmentVisible = false;
updateButtonStatus();
}
private void updateButtonStatus()
{
boolean linkEnabled = !shareFragmentVisible && !linkFragmentVisible && placeId == null && friends == null && photoUris.size() == 0;
boolean enabled = !shareFragmentVisible && !linkFragmentVisible;
friendsButton.setEnabled(enabled);
photosButton.setEnabled(enabled);
placeButton.setEnabled(enabled);
linkButton.setEnabled(linkEnabled);
friendsButton.setImageResource(AttrUtil.getResourceId(this, !enabled ? R.attr.addFriendDisabledIcon : R.attr.addFriendIcon));
photosButton.setImageResource(AttrUtil.getResourceId(this, !enabled ? R.attr.addPictureDisabledIcon : R.attr.addPictureIcon));
placeButton.setImageResource(AttrUtil.getResourceId(this, !enabled ? R.attr.locationDisabledIcon : R.attr.locationIcon));
linkButton.setImageResource(AttrUtil.getResourceId(this, !linkEnabled ? R.attr.linkDisabledIcon : R.attr.linkIcon));
}
@Override
public void onPermissionsChange()
{
if (pendingAnnounce)
{
handlePublishPost();
}
}
@Override
public void onCancelPermissions()
{
pendingAnnounce = false;
}
private void handlePublishPost()
{
pendingAnnounce = false;
Session session = Session.getActiveSession();
List<String> permissions = session.getPermissions();
if (!permissions.containsAll(PERMISSIONS))
{
pendingAnnounce = true;
requestPublishPermissions(this, PERMISSIONS);
return;
}
numTry = 0;
publishPost();
}
@Override
public void onDestroy()
{
super.onDestroy();
messageTextView = null;
friendsTextView = null;
placeTextView = null;
friendsButton = null;
privacyButton = null;
photosButton = null;
placeButton = null;
linkButton = null;
photosFragment = null;
albumsFragment = null;
linkFragment = null;
shareFragment = null;
privacy = null;
friends = null;
placeId = null;
photoUris = null;
friendCallback = null;
}
// ___ Loading friend lists
private void onRequestComplete(final Response response)
{
runOnUiThread(new Runnable() {
@Override
public void run()
{
if (response.getError() == null)
{
onRequestSuccess(response.getGraphObjectList());
}
else
{
onRequestError(response.getError());
}
}
});
}
private void onRequestSuccess(List<GraphObject> result)
{
KlyphData.setFriendLists(result);
}
private void onRequestError(RequestError error)
{
}
}