package com.socialize.ui.comment; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.AttributeSet; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.view.View; import android.widget.AdapterView; import android.widget.Toast; import com.socialize.CommentUtils; import com.socialize.Socialize; import com.socialize.android.ioc.IOCContainer; import com.socialize.config.SocializeConfig; import com.socialize.entity.Entity; import com.socialize.error.SocializeException; import com.socialize.i18n.LocalizationService; import com.socialize.listener.ListenerHolder; import com.socialize.listener.comment.CommentDeleteListener; import com.socialize.log.SocializeLogger; import com.socialize.ui.dialog.SafeProgressDialog; import com.socialize.ui.slider.ActionBarSliderView; import com.socialize.ui.view.EntityView; public class CommentView extends EntityView { private Dialog progress; private CommentListView commentListView; private boolean headerDisplayed = true; private Entity entity; private SocializeConfig config; private OnCommentViewActionListener onCommentViewActionListener; public static final String COMMENT_LISTENER = "socialize.comment.listener"; public CommentView(Context context, AttributeSet attrs) { super(context, attrs); } public CommentView(Context context) { super(context); } @Override protected View getView(Bundle bundle, Object...entityKey) { if (entityKey != null || entity != null) { if(commentListView == null) { if(entity == null) { entity = (Entity) entityKey[0]; } commentListView = container.getBean("commentList"); config = container.getBean("config"); commentListView.setEntity(entity); commentListView.setHeaderDisplayed(headerDisplayed); ListenerHolder holder = container.getBean("listenerHolder"); if(holder != null) { onCommentViewActionListener = holder.pop(COMMENT_LISTENER); commentListView.setOnCommentViewActionListener(onCommentViewActionListener); } // Register for the delete comment menu ((Activity)getContext()).registerForContextMenu(commentListView.getContent().getMainView()); } return commentListView; } else { SocializeLogger.e("No entity url specified for comment view"); return null; } } @Override protected void onBeforeSocializeInit() { if(!Socialize.getSocialize().isInitialized(getContext()) || !Socialize.getSocialize().isAuthenticated()) { try { // Cannot use localization here. progress = SafeProgressDialog.show(getContext(), "Loading Comments", "Please wait..."); } catch (Exception ignore) {} } } @Override public void onAfterAuthenticate(IOCContainer container) { if(progress != null) { try { progress.dismiss(); } catch (Exception ignore) {} } } @Override protected String[] getBundleKeys() { return new String[]{Socialize.ENTITY_OBJECT}; } /** * Called when the current logged in user updates their profile. */ public void onProfileUpdate() { if(commentListView != null) { commentListView.onProfileUpdate(); } } public void reload() { if(commentListView != null) { commentListView.reload(); } } @Override public View getLoadingView() { return null; } public ActionBarSliderView getCommentEntryViewSlider() { return (commentListView == null) ? null : commentListView.getCommentEntryViewSlider(); } public CommentEditField getCommentEntryField() { return (commentListView == null) ? null : commentListView.getCommentEntryField(); } public boolean isHeaderDisplayed() { return headerDisplayed; } public void setHeaderDisplayed(boolean headerDisplayed) { this.headerDisplayed = headerDisplayed; if(commentListView != null) { commentListView.setHeaderDisplayed(headerDisplayed); } } public void setEntity(Entity entity) { this.entity = entity; } public Entity getEntity() { return entity; } public void setLocalizationService(LocalizationService localizationService) { this.localizationService = localizationService; } @Override protected boolean onSettingsMenuItemClick(MenuItem item) { return onCommentViewActionListener != null && onCommentViewActionListener.onSettingsMenuItemClick(item); } @Override protected void createOptionsMenuItem(Activity source, Menu menu) { super.createOptionsMenuItem(source, menu); MenuItem add2 = menu.add("Refresh"); if(drawables != null) { add2.setIcon(drawables.getDrawable("ic_menu_refresh.png")); } add2.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if(onCommentViewActionListener == null || !onCommentViewActionListener.onRefreshMenuItemClick(item)) { reload(); } return true; } }); } /** * @param commentActivity * @param menu * @param v * @param menuInfo * @return */ public void onCreateContextMenu(CommentActivity commentActivity, ContextMenu menu, View v, ContextMenuInfo menuInfo) { if(config.isAllowDeleteComment()) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; CommentListItem item = (CommentListItem) info.targetView; if(item != null) { if(item.isDeleteOk()) { menu.setHeaderTitle("Delete"); menu.add(Menu.NONE, 0, 0, "Delete this comment"); } } } catch (ClassCastException e) {} } } public CommentListView getCommentListView() { return commentListView; } /** * @param commentActivity * @param item * @return */ public boolean onContextItemSelected(final CommentActivity commentActivity, MenuItem item) { if(config.isAllowDeleteComment()) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); CommentListItem cli = (CommentListItem) info.targetView; if(cli != null) { if(cli.isDeleteOk()) { final SafeProgressDialog progress = SafeProgressDialog.show(commentActivity); CommentUtils.deleteComment(commentActivity, cli.getCommentObject().getId(), new CommentDeleteListener() { @Override public void onError(SocializeException error) { progress.dismiss(); Toast.makeText(commentActivity, "Failed to delete comment", Toast.LENGTH_SHORT).show(); Log.e("Socialize", "Failed to delete comment", error); } @Override public void onDelete() { progress.dismiss(); Toast.makeText(commentActivity, "Comment deleted", Toast.LENGTH_SHORT).show(); reload(); } }); } } } catch (ClassCastException e) {} } return false; } }