/* * The MIT License (MIT) * * Copyright (c) 2014-2015 Umeng, Inc * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.umeng.comm.ui.adapters.viewholders; import java.util.Date; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Paint.FontMetrics; import android.os.Build; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.widget.TextView; import com.umeng.comm.core.CommunitySDK; import com.umeng.comm.core.beans.FeedItem; import com.umeng.comm.core.beans.FeedItem.CATEGORY; import com.umeng.comm.core.constants.ErrorCode; import com.umeng.comm.core.db.ctrl.impl.DatabaseAPI; import com.umeng.comm.core.impl.CommunityFactory; import com.umeng.comm.core.listeners.Listeners.LoginOnViewClickListener; import com.umeng.comm.core.listeners.Listeners.SimpleFetchListener; import com.umeng.comm.core.nets.responses.SimpleResponse; import com.umeng.comm.core.utils.DeviceUtils; import com.umeng.comm.core.utils.ResFinder; import com.umeng.comm.core.utils.ResFinder.ResType; import com.umeng.comm.core.utils.TimeUtils; import com.umeng.comm.core.utils.ToastMsg; import com.umeng.comm.ui.utils.BroadcastUtils; /** * */ public class FavouriteFeedItemViewHolder extends FeedItemViewHolder { private CommunitySDK mCommunitySDK; public TextView mFavoritestButton; // 该构造方法目前只针对FavouriteAdapter调用 public FavouriteFeedItemViewHolder() { isShowFavouriteView = true; } private boolean isShowFavouriteView = false; private boolean isFromFeedDetailePage = false; public FavouriteFeedItemViewHolder(Context context, View rootView) { super(context, rootView); } @Override protected void bindFeedItemData() { super.bindFeedItemData(); if (!isFromFeedDetailePage) { Date date = new Date(Long.parseLong(mFeedItem.addTime)); mTimeTv.setText(TimeUtils.format(date)); } RelativeLayout.LayoutParams params = (LayoutParams) mFavoritestButton.getLayoutParams(); // [此时说明在收藏页面,对于被删除的feed,需要隐藏分享、like、转发、评论按钮] if (isShowFavouriteView) { mShareBtn.setVisibility(View.VISIBLE); if (mFeedItem.category == CATEGORY.FAVORITES && mFeedItem.status >= FeedItem.STATUS_SPAM) { mShareBtn.setVisibility(View.GONE); mLikeCountTextView.setVisibility(View.GONE); mForwardCountTextView.setVisibility(View.GONE); mCommentCountTextView.setVisibility(View.GONE); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); params.rightMargin = DeviceUtils.dp2px(mContext, 13); mFavoritestButton.setLayoutParams(params); } else { mLikeCountTextView.setVisibility(View.VISIBLE); mForwardCountTextView.setVisibility(View.VISIBLE); mCommentCountTextView.setVisibility(View.VISIBLE); // params.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT); removeRuleFromLayoutParam(params, RelativeLayout.ALIGN_PARENT_RIGHT); params.rightMargin = DeviceUtils.dp2px(mContext, 40); mFavoritestButton.setLayoutParams(params); } } else { resetInitStatus(); } if (mFeedItem.category == CATEGORY.FAVORITES) { mFavoritestButton.setBackgroundResource(ResFinder.getResourceId(ResType.DRAWABLE, "umeng_comm_favorites_pressed")); setSpamFeed(mFeedItem); } else { mFavoritestButton.setBackgroundResource(ResFinder.getResourceId(ResType.DRAWABLE, "umeng_comm_favorites_normal")); } // 详情页面需要隐藏 if (isFromFeedDetailePage) { mLikeCountTextView.setVisibility(View.GONE); mForwardCountTextView.setVisibility(View.GONE); mCommentCountTextView.setVisibility(View.GONE); } } private void resetInitStatus() { RelativeLayout.LayoutParams params = (LayoutParams) mFavoritestButton.getLayoutParams(); mShareBtn.setVisibility(View.VISIBLE); mLikeCountTextView.setVisibility(View.VISIBLE); mForwardCountTextView.setVisibility(View.VISIBLE); mCommentCountTextView.setVisibility(View.VISIBLE); params.addRule(RelativeLayout.ALIGN_LEFT, mShareBtn.getId()); // params.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT); removeRuleFromLayoutParam(params, RelativeLayout.ALIGN_PARENT_RIGHT); params.rightMargin = DeviceUtils.dp2px(mContext, 40); mFavoritestButton.setLayoutParams(params); } @SuppressLint("NewApi") private void removeRuleFromLayoutParam(RelativeLayout.LayoutParams param, int verb) { if (Build.VERSION.SDK_INT >= 17) { param.removeRule(verb); } else { int[] rules = param.getRules(); rules[RelativeLayout.ALIGN_PARENT_RIGHT] = 0; } } @Override protected void inflateFromXML() { super.inflateFromXML(); mFavoritestButton = findViewById(ResFinder.getId("umeng_comm_favorites_textview")); } @Override protected void setBaseFeeditemInfo() { super.setBaseFeeditemInfo(); if (isFromFeedDetailePage) { mFeedTextTv.setOnClickListener(null); } else { mFeedTextTv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mFeedItem.status >= FeedItem.STATUS_SPAM) { ToastMsg.showShortMsgByResName("umeng_comm_feed_spam_deleted"); return; } mPresenter.clickFeedItem(); } }); } mFeedTextTv.setVisibility(View.VISIBLE); } @Override protected void initPresenters() { mCommunitySDK = CommunityFactory.getCommSDK(mContext); super.initPresenters(); } /** * 设置收藏Feed spam的样式+文本内容。【仅仅针对收藏有效】</br> * * @param feedItem */ @SuppressWarnings("deprecation") private void setSpamFeed(FeedItem feedItem) { ViewGroup.LayoutParams params = mFeedTextTv.getLayoutParams(); if (feedItem.status < FeedItem.STATUS_SPAM) { // 设置成默认的状态,避免复用导致问题 params.width = ViewGroup.LayoutParams.MATCH_PARENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT; mFeedTextTv.setLayoutParams(params); mFeedTextTv.setGravity(Gravity.LEFT); mFeedTextTv.setBackgroundDrawable(null); mFeedTextTv.setText(feedItem.text); return; } mFeedTextTv.setVisibility(View.VISIBLE); String text = getToastText(feedItem.status); FontMetrics fm = mFeedTextTv.getPaint().getFontMetrics(); int textHeight = (int) Math.ceil(fm.descent - fm.ascent) + 60; params.width = ViewGroup.LayoutParams.MATCH_PARENT; // params.height = ViewGroup.LayoutParams.WRAP_CONTENT; params.height = textHeight; mFeedTextTv.setLayoutParams(params); mFeedTextTv.setGravity(Gravity.CENTER); // mFeedTextTv.setPadding(0, 10, 0, 10); mFeedTextTv.setBackgroundDrawable(ResFinder.getDrawable("umeng_comm_forward_bg")); mFeedTextTv.setText(text); } private String getToastText(int status) { String text = ResFinder.getString("umeng_comm_feed_spam_deleted"); // switch (status) { // case FeedItem.STATUS_SPAM: // text = ResFinder.getString("umeng_comm_feed_spam_shield"); // break; // case FeedItem.STATUS_DELETE: // text = ResFinder.getString("umeng_comm_feed_spam_deleted"); // break; // case FeedItem.STATUS_SNOW: // text = ResFinder.getString("umeng_comm_feed_spam_deleted_admin"); // break; // case FeedItem.STATUS_SENSITIVE: // text = ResFinder.getString("umeng_comm_feed_spam_sensitive"); // break; // default: // text = ResFinder.getString("umeng_comm_feed_spam_deleted"); // break; // } return text; } /** * 收藏Feed</br> */ private void favoritesFeed() { mCommunitySDK.favoriteFeed(mFeedItem.id, new SimpleFetchListener<SimpleResponse>() { @Override public void onComplete(SimpleResponse response) { if (response.errCode != ErrorCode.NO_ERROR) { if (response.errCode == ErrorCode.ERR_CODE_FEED_FAVOURITED) { mFavoritestButton.setBackgroundResource(ResFinder.getResourceId( ResType.DRAWABLE, "umeng_comm_favorites_pressed")); ToastMsg.showShortMsgByResName("umeng_comm_has_favorited"); mFeedItem.category = CATEGORY.FAVORITES; BroadcastUtils.sendFeedUpdateBroadcast(mContext, mFeedItem); } else if (response.errCode == ErrorCode.ERR_CODE_FAVOURITED_OVER_FLOW) { ToastMsg.showShortMsgByResName("umeng_comm_favorites_overflow"); } else if (response.errCode == ErrorCode.USER_FORBIDDEN_ERR_CODE) { ToastMsg.showShortMsgByResName("umeng_comm_user_unusable"); } else { ToastMsg.showShortMsgByResName("umeng_comm_favorites_failed"); } } else { mFavoritestButton.setBackgroundResource(ResFinder.getResourceId( ResType.DRAWABLE, "umeng_comm_favorites_pressed")); ToastMsg.showShortMsgByResName("umeng_comm_favorites_success"); mFeedItem.category = CATEGORY.FAVORITES; mFeedItem.addTime = String.valueOf(System.currentTimeMillis()); DatabaseAPI.getInstance().getFeedDBAPI().saveFeedToDB(mFeedItem); // 数据同步 BroadcastUtils.sendFeedUpdateBroadcast(mContext, mFeedItem); BroadcastUtils.sendFeedFavouritesBroadcast(mContext, mFeedItem); } } }); } @Override protected void initEventHandle() { super.initEventHandle(); mFavoritestButton.setVisibility(View.VISIBLE); // 收藏按钮 mFavoritestButton.setOnClickListener(new LoginOnViewClickListener() { @Override protected void doAfterLogin(View v) { if (mFeedItem.category == CATEGORY.FAVORITES) { cancelFavoritesFeed(); } else { favoritesFeed(); } } }); } /** * 是否显示收藏按钮。目前该方法仅仅在Feed详情页面调用</br> [修改该方法请慎重] * * @param isShow */ public void setShowFavouriteView(boolean isShow) { isShowFavouriteView = isShow; isFromFeedDetailePage = true; } /** * 取消收藏feed</br> */ private void cancelFavoritesFeed() { mCommunitySDK.cancelFavoriteFeed(mFeedItem.id, new SimpleFetchListener<SimpleResponse>() { @Override public void onComplete(SimpleResponse response) { if (response.errCode != ErrorCode.NO_ERROR) { if (response.errCode == ErrorCode.ERR_CODE_FEED_NOT_FAVOURITED) { mFavoritestButton.setBackgroundResource(ResFinder .getResourceId( ResType.DRAWABLE, "umeng_comm_favorites_normal")); ToastMsg.showShortMsgByResName( "umeng_comm_not_favorited"); mFeedItem.category = CATEGORY.NORMAL; BroadcastUtils.sendFeedUpdateBroadcast(mContext, mFeedItem); } else if (response.errCode == ErrorCode.USER_FORBIDDEN_ERR_CODE) { ToastMsg.showShortMsgByResName("umeng_comm_user_unusable"); } else { ToastMsg.showShortMsgByResName( "umeng_comm_cancel_favorites_failed"); } } else { mFavoritestButton.setBackgroundResource(ResFinder.getResourceId( ResType.DRAWABLE, "umeng_comm_favorites_normal")); ToastMsg.showShortMsgByResName( "umeng_comm_cancel_favorites_success"); mFeedItem.category = CATEGORY.NORMAL; DatabaseAPI.getInstance().getFeedDBAPI().saveFeedToDB(mFeedItem); // 数据同步 BroadcastUtils.sendFeedUpdateBroadcast(mContext, mFeedItem); } } }); } }