package com.sun.bingo.ui.activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.framework.dialog.ToastTip; import com.mingle.widget.LoadingView; import com.sina.weibo.sdk.api.TextObject; import com.sina.weibo.sdk.api.WebpageObject; import com.sina.weibo.sdk.api.WeiboMultiMessage; import com.sina.weibo.sdk.api.share.BaseResponse; import com.sina.weibo.sdk.api.share.IWeiboHandler; import com.sina.weibo.sdk.api.share.IWeiboShareAPI; import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest; import com.sina.weibo.sdk.api.share.WeiboShareSDK; import com.sina.weibo.sdk.constant.WBConstants; import com.sina.weibo.sdk.utils.Utility; import com.sun.bingo.R; import com.sun.bingo.adapter.RecyclerViewAdapter; import com.sun.bingo.constant.ConstantParams; import com.sun.bingo.control.PageControl; import com.sun.bingo.model.BingoEntity; import com.sun.bingo.model.UserEntity; import com.sun.bingo.util.UserEntityUtil; import com.sun.bingo.widget.CircleRefreshLayout; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by sunfusheng on 15/11/10. */ public class UserInfoActivity extends BaseActivity<PageControl> implements CircleRefreshLayout.OnCircleRefreshListener, IWeiboHandler.Response { @BindView(R.id.recycler_view) RecyclerView recyclerView; @BindView(R.id.circle_refresh_layout) CircleRefreshLayout circleRefreshLayout; @BindView(R.id.loadingView) LoadingView loadingView; @BindView(R.id.tv_status) TextView tvStatus; @BindView(R.id.ll_status) FrameLayout llStatus; @BindView(R.id.iv_back) ImageView ivBack; @BindView(R.id.iv_user_avatar) ImageView ivUserAvatar; @BindView(R.id.tv_nick_name) TextView tvNickName; @BindView(R.id.tv_user_sign) TextView tvUserSign; @BindView(R.id.ll_user_layout) LinearLayout llUserLayout; @BindView(R.id.tv_location) TextView tvLocation; private UserEntity mUserEntity; private int lastVisibleItem; private LinearLayoutManager mLinearLayoutManager; protected List<BingoEntity> mEntities; protected RecyclerViewAdapter mAdapter; private IWeiboShareAPI mWeiboShareAPI; // 新浪微博分享接口实例 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_info); ButterKnife.bind(this); initSinaShare(savedInstanceState); initData(); initView(); initListener(); startRefresh(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); mWeiboShareAPI.handleWeiboResponse(intent, this); } private void initSinaShare(Bundle savedInstanceState) { mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, ConstantParams.SINA_APP_KEY); mWeiboShareAPI.registerApp(); if (savedInstanceState != null) { mWeiboShareAPI.handleWeiboResponse(getIntent(), this); } } /** * 第三方应用发送请求消息到微博,唤起微博分享界面。 * 同时可以分享文本、图片以及其它媒体资源(网页、音乐、视频、声音中的一种)。 */ public void sendMultiMessageToSina(BingoEntity entity) { if (!mWeiboShareAPI.isWeiboAppSupportAPI()) { Toast.makeText(this, "暂不支持新浪微博分享", Toast.LENGTH_SHORT).show(); return ; } // 1. 初始化微博的分享消息 WeiboMultiMessage weiboMessage = new WeiboMultiMessage(); if (mWeiboShareAPI.getWeiboAppSupportAPI() >= 10351) { TextObject textObject = new TextObject(); textObject.text = "【Bingo下载页面:https://fir.im/Bingo】 \n "+entity.getDescribe(); weiboMessage.textObject = textObject; } weiboMessage.mediaObject = getWebpageObj(entity); // 2. 初始化从第三方到微博的消息请求 SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest(); // 用transaction唯一标识一个请求 request.transaction = String.valueOf(System.currentTimeMillis()); request.multiMessage = weiboMessage; // 3. 发送请求消息到微博,唤起微博分享界面 mWeiboShareAPI.sendRequest(mActivity, request); } // 创建新浪微博网页分享对象 private WebpageObject getWebpageObj(BingoEntity entity) { WebpageObject mediaObject = new WebpageObject(); mediaObject.identify = Utility.generateGUID(); mediaObject.title = "来自Bingo分享"; mediaObject.description = entity.getDescribe(); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); // 设置 Bitmap 类型的图片到视频对象里。 注意:最终压缩过的缩略图大小不得超过 32kb。 mediaObject.setThumbImage(bitmap); mediaObject.actionUrl = entity.getWebsite(); mediaObject.defaultText = "Bingo分享"; return mediaObject; } @Override public void onResponse(BaseResponse baseResponse) { if(baseResponse!= null){ switch (baseResponse.errCode) { case WBConstants.ErrorCode.ERR_OK: break; case WBConstants.ErrorCode.ERR_CANCEL: break; case WBConstants.ErrorCode.ERR_FAIL: ToastTip.show("分享失败 " + baseResponse.errMsg); break; } } } private void initData() { mUserEntity = (UserEntity) getIntent().getSerializableExtra("userEntity"); } private void initView() { tvNickName.setText(TextUtils.isEmpty(mUserEntity.getNickName())? "未知":mUserEntity.getNickName()); tvUserSign.setText(TextUtils.isEmpty(mUserEntity.getUserSign())? "还没有个性签名":mUserEntity.getUserSign()); UserEntityUtil.setUserAvatarView(mContext, mUserEntity.getUserAvatar(), ivUserAvatar); tvLocation.setText(mUserEntity.getCity() + " " + mUserEntity.getDistrict()); llUserLayout.setBackgroundColor(getColorPrimary()); mLinearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(mLinearLayoutManager); loadingView.setVisibility(View.VISIBLE); mEntities = new ArrayList<>(); mAdapter = new RecyclerViewAdapter(this, mEntities); recyclerView.setAdapter(mAdapter); } private void initListener() { recyclerView.addOnScrollListener(new PauseOnScrollListener()); circleRefreshLayout.setOnRefreshListener(this); ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } class PauseOnScrollListener extends RecyclerView.OnScrollListener { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); switch (newState) { case RecyclerView.SCROLL_STATE_IDLE: int size = recyclerView.getAdapter().getItemCount(); if (lastVisibleItem + 1 == size && mAdapter.isLoadMoreShown() && !mAdapter.getLoadMoreViewText().equals(getString(R.string.load_data_adequate))) { onScrollLast(); } break; case RecyclerView.SCROLL_STATE_DRAGGING: break; } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = mLinearLayoutManager.findLastVisibleItemPosition(); } } private void completeRefresh() { if (circleRefreshLayout != null) { circleRefreshLayout.completeRefresh(); } if (loadingView != null && loadingView.getVisibility() == View.VISIBLE) { loadingView.setVisibility(View.GONE); } } @Override public void startRefresh() { //让子弹飞一会儿,防止刷新太快哦 messageProxy.postRunnableDelay(new Runnable() { @Override public void run() { onRefreshStart(); } }, 500); } //下拉刷新数据 protected void onRefreshStart() { mControl.getMyBingoListData(this, mUserEntity.getObjectId()); } //上拉加载数据 protected void onScrollLast() { mControl.getMyBingoListDataMore(this, mUserEntity.getObjectId()); } //数据为空 public void getDataEmpty() { completeRefresh(); llStatus.setVisibility(View.VISIBLE); mAdapter.setLoadMoreViewVisibility(View.GONE); tvStatus.setVisibility(View.VISIBLE); tvStatus.setText("暂无分享的文章"); mEntities.clear(); mAdapter.notifyDataSetChanged(); } //数据足够PAGE_SIZE public void getDataAdequate() { completeRefresh(); llStatus.setVisibility(View.GONE); mAdapter.setLoadMoreViewVisibility(View.VISIBLE); mAdapter.setLoadMoreViewText(getString(R.string.loading_data)); List<BingoEntity> entities = mModel.getList(1); mEntities.clear(); mEntities.addAll(entities); mAdapter.notifyDataSetChanged(); } //数据不足PAGE_SIZE public void getDataInadequate() { completeRefresh(); llStatus.setVisibility(View.GONE); mAdapter.setLoadMoreViewVisibility(View.GONE); List<BingoEntity> entities = mModel.getList(1); mEntities.clear(); mEntities.addAll(entities); mAdapter.notifyDataSetChanged(); } //加载失败 public void getDataFail() { completeRefresh(); llStatus.setVisibility(View.VISIBLE); mAdapter.setLoadMoreViewVisibility(View.GONE); tvStatus.setVisibility(View.VISIBLE); tvStatus.setText(R.string.load_data_fail); mEntities.clear(); mAdapter.notifyDataSetChanged(); } //数据为空 (More) public void getMoreDataEmpty() { mAdapter.setLoadMoreViewVisibility(View.GONE); } //数据足够PAGE_SIZE (More) public void getMoreDataAdequate() { mAdapter.setLoadMoreViewVisibility(View.VISIBLE); List<BingoEntity> entities = mModel.getList(2); mEntities.addAll(entities); mAdapter.notifyDataSetChanged(); } //数据不足PAGE_SIZE (More) public void getMoreDataInadequate() { mAdapter.setLoadMoreViewVisibility(View.VISIBLE); mAdapter.setLoadMoreViewText(getString(R.string.load_data_adequate)); List<BingoEntity> entities = mModel.getList(2); mEntities.addAll(entities); mAdapter.notifyDataSetChanged(); } //加载失败 (More) public void getMoreDataFail() { mAdapter.setLoadMoreViewVisibility(View.VISIBLE); mAdapter.setLoadMoreViewText(getString(R.string.load_data_fail)); } }