package com.example.fei.yhb_20.ui;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.fei.yhb_20.R;
import com.example.fei.yhb_20.bean.Comment;
import com.example.fei.yhb_20.bean.CommentItem;
import com.example.fei.yhb_20.bean.Merchant;
import com.example.fei.yhb_20.bean.Post;
import com.example.fei.yhb_20.utils.ACache;
import com.example.fei.yhb_20.utils.ExpressionUtil;
import com.example.fei.yhb_20.utils.MyUtils;
import com.squareup.picasso.Picasso;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.datatype.BmobPointer;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.GetListener;
public class DeatilActivity extends ActionBarActivity implements View.OnClickListener{
private static final String TAG = "DeatilActivity";
@InjectView(R.id.tv_main_postName)TextView postUserName;
@InjectView(R.id.tv_main_time)TextView time;
@InjectView(R.id.iv_main_share)ImageView share;
@InjectView(R.id.iv_main_list)ImageView list;
@InjectView(R.id.tv_main_content)TextView content;
@InjectView(R.id.tv_main_like)TextView like;
@InjectView(R.id.tv_main_dislike)TextView dislike;
@InjectView(R.id.tv_main_comment)TextView comment;
@InjectView(R.id.ll_main_like)LinearLayout llLike;
@InjectView(R.id.ll_main_dislike)LinearLayout llDislike;
@InjectView(R.id.ll_main_conment)LinearLayout llComment;
@InjectView(R.id.ratingbar)RatingBar ratingBar;
@InjectView(R.id.location)TextView location;
@InjectView(R.id.lastTime)TextView lastTime;
@InjectView(R.id.iv_main_like)ImageView ivLike;
@InjectView(R.id.iv_main_dislike)ImageView ivDislike;
@InjectView(R.id.ll_gallery)LinearLayout gallery;
@InjectView(R.id.iv_main_logo)ImageView mAvatar;
@InjectView(R.id.tv_main_merchantName)
TextView merchantName;
private static final int LIKE = 0;
private static final int DISLIKE = 1;
private static final int COMMENT = 2;
private static ACache aCache;
private Post post;
private String objectId;
private String userId;
private ArrayList numberFooter;
private byte[] footerBoolean;
private Picasso picasso;
private ListView listView;
private ImageView face;
private Button send;
private EditText edComment;
private RelativeLayout frameLayout;
private LinearLayout llFoot;
private commentAdapter adapter;
private View header;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deatil);
aCache = ACache.get(this);
picasso = Picasso.with(this);
initViews();
}
/**
* 以后可能要接受来自不同界面的post文件,都要在这里进行一些处理
*/
private void initViews() {
face = (ImageView) findViewById(R.id.team_singlechat_id_expression);
edComment = (EditText) findViewById(R.id.team_singlechat_id_edit);
send = (Button) findViewById(R.id.team_singlechat_id_send);
frameLayout = (RelativeLayout) findViewById(R.id.container);
llFoot = (LinearLayout) findViewById(R.id.team_singlechat_id_foot);
Intent intent = getIntent();
if (intent!=null){
String souceActivity = intent.getStringExtra("sourceActivity");
if (souceActivity != null) {
if (souceActivity.equals("MyCollections")) {
//去联网查询
String postId = intent.getStringExtra("postId");
BmobQuery<Post> query = new BmobQuery<>();
query.include("user");
query.getObject(DeatilActivity.this, postId, new GetListener<Post>() {
@Override
public void onSuccess(Post mPost) {
post = mPost;
deliverPost(mPost);
initEvents();
}
@Override
public void onFailure(int i, String s) {
Log.d(TAG, s + i);
}
});
} else if (souceActivity.equals("MainFragment")) {
post = (Post) intent.getSerializableExtra("post");
deliverPost(post);
initEvents();
}
}
}
}
/**
* 处理来自不同界面的post
*
* @param post
*/
private void deliverPost(Post post) {
header = LayoutInflater.from(this).inflate(R.layout.header, null);
ButterKnife.inject(this, header);
final String paths[] = post.getPaths().split("\\|");
int t = paths.length;
objectId = post.getObjectId();
footerBoolean = aCache.getAsBinary(post.getObjectId() + "footerBoolean");
postUserName.setText(post.getUser().getUsername());
String SmerchantName = "";
if (post.getMerchantName().equals("") || post.getMerchantName() == null) {
//do nothing
Log.d(TAG, "merchantName is null");
} else {
SmerchantName = " " + post.getMerchantName() + " ";
}
merchantName.setText(SmerchantName);
userId = post.getUser().getObjectId();
//格式化时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = simpleDateFormat.parse(post.getCreatedAt());
} catch (ParseException e) {
e.printStackTrace();
}
time.setText(MyUtils.timeLogic(date, this));
String zhengze = "f0[0-9]{2}|f10[0-7]";
SpannableString spannableString = ExpressionUtil.getExpressionString(this, post.getContent(), zhengze);
content.setText(spannableString);
numberFooter = post.getNumberFooter();
like.setText(String.valueOf(numberFooter.get(LIKE)));
dislike.setText(String.valueOf(numberFooter.get(DISLIKE)));
ratingBar.setRating(post.getRating());
lastTime.setText("活动时间:" + post.getActivityTiem());
if (post.getDetailPos()!=null){
location.setText("商户地点:"+post.getCity()+post.getDistrict()+post.getDetailPos());
}else{
location.setText("商户地点:"+post.getCity()+post.getDistrict());
}
if (footerBoolean != null) {
if (footerBoolean[DISLIKE] == 0) {
ivDislike.setImageResource(R.drawable.icon_dislike_pressed);
}
if (footerBoolean[LIKE] == 0) {
ivLike.setImageResource(R.drawable.icon_heart_pressed);
}
}
for (int i1 = 0; i1 < paths.length; i1++) {
final ImageView imageView;
imageView = new ImageView(this);
picasso.load(paths[i1]).placeholder(R.drawable.logo).resize(300, 300).into(imageView);
imageView.setPadding(2, 2, 2, 2);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(DeatilActivity.this, GalleryUrlActivity.class);
intent.putExtra("photoUrls", paths);
DeatilActivity.this.startActivity(intent);
}
});
gallery.addView(imageView);
}
/**
* 处理一下多余的数据
*/
final ArrayList<CommentItem> data = post.getCommentItems();
data.add(0, new CommentItem());
listView = (ListView) findViewById(R.id.comment_list);
//查询post的所有的评论
reGetComment();
refreshAvatar(post);
send.setEnabled(false);
}
private void reGetComment() {
BmobQuery<Comment> commentsQuery = new BmobQuery<>();
commentsQuery.addWhereRelatedTo("comment", new BmobPointer(post));
commentsQuery.findObjects(this, new FindListener<Comment>() {
@Override
public void onSuccess(List<Comment> comments) {
//得到了所有的comments的列表
comment.setText(String.valueOf(comments.size()));
adapter = new commentAdapter(DeatilActivity.this, comments, header);
listView.setAdapter(adapter);
}
@Override
public void onError(int i, String s) {
Log.d(TAG, s + i);
}
});
}
public void refreshAvatar(Post post) {
BmobQuery<Merchant> query = new BmobQuery<Merchant>();
query.getObject(this,post.getUser().getObjectId(),new GetListener<Merchant>() {
@Override
public void onSuccess(Merchant merchant) {
if (merchant.getAvatarPaht()!=null){
Picasso.with(DeatilActivity.this).load(merchant.getAvatarPaht()).placeholder(R.drawable.pull_scroll_view_avatar_default).error(R.drawable.pull_scroll_view_avatar_default).resize(68, 68).into(mAvatar);
}else{
Toast.makeText(DeatilActivity.this,"test",Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(int i, String s) {
Log.e(TAG,s+i);
}
});
}
class commentAdapter extends BaseAdapter{
private Context context;
private List<Comment> commentItems;
private View header;
public commentAdapter(Context context, List<Comment> commentItems, View header) {
this.context = context;
commentItems.add(0, new Comment());
this.commentItems = commentItems;
this.header = header;
}
@Override
public int getViewTypeCount() {
return super.getViewTypeCount();
}
@Override
public int getCount() {
return commentItems.size();
}
@Override
public Object getItem(int position) {
return commentItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (position==0){
return header;
}else{
convertView = LayoutInflater.from(context).inflate(R.layout.comment_item,null);
final ImageView avatar = (ImageView) convertView.findViewById(R.id.comment_avatar);
TextView comment = (TextView) convertView.findViewById(R.id.comment);
TextView time = (TextView) convertView.findViewById(R.id.tv_time);
String zhengze = "f0[0-9]{2}|f10[0-7]";
SpannableString spannableString = ExpressionUtil.getExpressionString(context, commentItems.get(position).getContent(), zhengze);
comment.setText(spannableString);
TextView name = (TextView) convertView.findViewById(R.id.comment_username);
name.setText(commentItems.get(position).getUserName());
time.setText(commentItems.get(position).getCreatedAt().substring(5));
ImageView reply = (ImageView) convertView.findViewById(R.id.reply);
reply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
edComment.requestFocus();
edComment.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Log.e(TAG,"before"+s);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.e(TAG,"onTextChanged"+s);
if (TextUtils.isEmpty(s)) {
send.setEnabled(false);
}else{
send.setEnabled(true);
}
}
@Override
public void afterTextChanged(Editable s) {
Log.e(TAG,"after");
}
});
//强制显示键盘
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
});
BmobQuery<Merchant> query = new BmobQuery<Merchant>();
query.getObject(DeatilActivity.this, commentItems.get(position).getUserId(), new GetListener<Merchant>() {
@Override
public void onSuccess(Merchant merchant) {
picasso.load(merchant.getAvatarPaht()).placeholder(R.drawable.pull_scroll_view_avatar_default).resize(45, 45).into(avatar);
}
@Override
public void onFailure(int i, String s) {
Log.e(TAG, s + i);
}
});
// query.addWhereContainedIn("objectId", Arrays.asList(ids));
// query.findObjects(DeatilActivity.this, new FindListener<Merchant>() {
// @Override
// public void onSuccess(List<Merchant> merchants) {
// if (merchants.get(0).getAvatarPaht()!=null){
// Log.e(TAG,merchants.get(0).getAvatarPaht());
// picasso.load(merchants.get(0).getAvatarPaht()).placeholder(R.drawable.ic_launcher).resize(45,45).into(avatar);
// }
// }
//
// @Override
// public void onError(int i, String s) {
// }
// });
return convertView;
}
}
}
// class commentAdapter extends BaseAdapter{
//
// private Context context;
// private ArrayList<CommentItem> commentItems;
// private View header;
//
// public commentAdapter(Context context,ArrayList<CommentItem> commentItems,View header){
// this.context = context;
// ArrayList<CommentItem> realists = new ArrayList<>();
// for (int i = commentItems.size()-1;i>commentItems.size()/2-1;i--){
// realists.add(commentItems.get(i));
// }
// this.commentItems = realists;
// this.header = header;
// }
//
// @Override
// public int getCount() {
// return commentItems.size();
// }
//
// @Override
// public Object getItem(int position) {
// return commentItems.get(position);
// }
//
// @Override
// public long getItemId(int position) {
// return position;
// }
//
// @Override
// public View getView(int position, View convertView, ViewGroup parent) {
// if (position==0){
// return header;
// }else{
// convertView = LayoutInflater.from(context).inflate(R.layout.comment_item,null);
// final ImageView avatar = (ImageView) convertView.findViewById(R.id.comment_avatar);
// TextView comment = (TextView) convertView.findViewById(R.id.comment);
// TextView time = (TextView) convertView.findViewById(R.id.tv_time);
//
// if (commentItems.get(position).getComment() == null || commentItems.get(position).getComment().equals("")){
// comment.setText("");
// }else{
// String zhengze = "f0[0-9]{2}|f10[0-7]";
// SpannableString spannableString = ExpressionUtil.getExpressionString(context, commentItems.get(position).getComment(), zhengze);
// comment.setText(spannableString);
// }
//
// TextView name = (TextView) convertView.findViewById(R.id.comment_username);
// ImageView reply = (ImageView) convertView.findViewById(R.id.reply);
// reply.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// edComment.requestFocus();
// edComment.addTextChangedListener(new TextWatcher() {
// @Override
// public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Log.e(TAG,"before"+s);
// }
// @Override
// public void onTextChanged(CharSequence s, int start, int before, int count) {
// Log.e(TAG,"onTextChanged"+s);
// if (TextUtils.isEmpty(s)) {
// send.setEnabled(false);
// }else{
// send.setEnabled(true);
// }
// }
// @Override
// public void afterTextChanged(Editable s) {
// Log.e(TAG,"after");
// }
// });
//
// //强制显示键盘
// imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
// }
// });
// //在这里设置
// name.setText(commentItems.get(position).getName());
// time.setText(commentItems.get(position).getCreatedAt());
//
// if (commentItems.get(position).getObjectId()!=null){
// BmobQuery<Merchant> query = new BmobQuery<Merchant>();
// query.addQueryKeys("avatarPaht");
// String []ids = {commentItems.get(position).getObjectId()};
// query.addWhereContainedIn("objectId", Arrays.asList(ids));
// query.findObjects(DeatilActivity.this, new FindListener<Merchant>() {
// @Override
// public void onSuccess(List<Merchant> merchants) {
// if (merchants.get(0).getAvatarPaht()!=null){
// Log.e(TAG,merchants.get(0).getAvatarPaht());
// picasso.load(merchants.get(0).getAvatarPaht()).placeholder(R.drawable.ic_launcher).resize(45,45).into(avatar);
// }
// }
//
// @Override
// public void onError(int i, String s) {
// Log.e(TAG,s + i);
// }
// });
// }
// return convertView;
// }
//
// }
// }
private void initEvents() {
share.setOnClickListener(this);
list.setOnClickListener(this);
llComment.setOnClickListener(this);
llLike.setOnClickListener(this);
llDislike.setOnClickListener(this);
face.setOnClickListener(this);
send.setOnClickListener(this);
frameLayout.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener);
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_deatil, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
switch (v.getId())
{
case R.id.iv_main_share:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "我有好东西与您分享"+post.getContent());
sendIntent.setType("text/plain");
startActivity(sendIntent);
break;
case R.id.iv_main_list:
MyUtils.showPopupMenu(this, objectId, userId);
break;
case R.id.ll_main_conment:
edComment.requestFocus();
edComment.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Log.e(TAG,"before"+s);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.e(TAG,"onTextChanged"+s);
if (TextUtils.isEmpty(s)) {
send.setEnabled(false);
}else{
send.setEnabled(true);
}
}
@Override
public void afterTextChanged(Editable s) {
Log.e(TAG,"after");
}
});
//强制显示键盘
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
break;
case R.id.team_singlechat_id_send:
llFoot.setVisibility(View.INVISIBLE);
MyUtils.commentSend(post,edComment,this);
imm.hideSoftInputFromWindow(edComment.getWindowToken(), 0);
//强制隐藏
edComment.setText(null);
break;
case R.id.team_singlechat_id_expression:
MyUtils.showFaceDialog(this, edComment);
break;
case R.id.ll_main_dislike:
MyUtils.footerCommand(footerBoolean,DISLIKE,ivDislike,dislike,numberFooter,aCache,post,this,objectId);
break;
case R.id.ll_main_like:
MyUtils.footerCommand(footerBoolean,LIKE,ivLike,like,numberFooter,aCache,post,this,objectId);
break;
default:
break;
}
}
ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//比较Activity根布局与当前布局的大小
Log.e(TAG,"onGlobalLayout");
int heightDiff = frameLayout.getRootView().getHeight()- frameLayout.getHeight();
if(heightDiff >200){
//大小超过100时,一般为显示虚拟键盘事件
// getActivity().findViewById(R.id.footer).setVisibility(View.GONE);
llFoot.setVisibility(View.VISIBLE);
Log.e(TAG,"显示");
}else{
Log.e(TAG, "隐藏");
// getActivity().findViewById(R.id.footer).setVisibility(View.VISIBLE);
llFoot.setVisibility(View.GONE);
// LayoutInflater.from(MainActivity.this).inflate(R.layout.fragment_main,null).findViewById(R.id.team_singlechat_id_foot).setVisibility(View.GONE);
//大小小于100时,为不显示虚拟键盘或虚拟键盘隐藏
}
}
};
}