package com.lbrant.phone.view;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ContextMenu;
import android.view.View;
/**
* 作者:dell
* 时间:2015/11/3 18:34
* 文件:PhoneRecorder
* 描述:
*/
public class ContextMenuRecyclerView extends RecyclerView {
private static final String LOG_TAG = "ContextMenuRecyclerView";
private RecyclerContextMenuInfo mContextMenuInfo = new RecyclerContextMenuInfo();
public ContextMenuRecyclerView(Context context) {
super(context);
}
public ContextMenuRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ContextMenuRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected ContextMenu.ContextMenuInfo getContextMenuInfo() {
return mContextMenuInfo;
}
@Override
public boolean showContextMenuForChild(View originalView) {
Log.d(LOG_TAG, "showContextMenuForChild");
Object tag = originalView.getTag();
if (tag instanceof RecyclerItemMarker) {
mContextMenuInfo.mRecycleItemMarker = (RecyclerItemMarker) tag;
}
return super.showContextMenuForChild(originalView);
}
public static class RecyclerItemMarker {
public final int position;
public final Object obj;
public RecyclerItemMarker(int position, Object obj) {
this.position = position;
this.obj = obj;
}
}
public static class RecyclerContextMenuInfo implements ContextMenu.ContextMenuInfo {
public RecyclerItemMarker mRecycleItemMarker;
}
}
private class RecordRecycleViewAdapter extends RecyclerView.Adapter<RecordRecycleViewAdapter.RecordViewHolder> {
private Cursor mCallRecordCursor;
private int mIdIndex;
private int mPhoneNumberIndex;
private int mCallTimeIndex;
private int mDurationIndex;
private int mPathIndex;
public RecordRecycleViewAdapter(Cursor cursor) {
mCallRecordCursor = cursor;
updateCursorColumnIndex();
}
private void updateCursorColumnIndex() {
if (mCallRecordCursor != null) {
mIdIndex = mCallRecordCursor.getColumnIndex(BaseDatabaseHelper.RECORDS_COLUMNS._ID);
mPhoneNumberIndex = mCallRecordCursor.getColumnIndex(BaseDatabaseHelper.RECORDS_COLUMNS.NUMBER);
mCallTimeIndex = mCallRecordCursor.getColumnIndex(BaseDatabaseHelper.RECORDS_COLUMNS.CALL_TIME);
mDurationIndex = mCallRecordCursor.getColumnIndex(BaseDatabaseHelper.RECORDS_COLUMNS.DURATION);
mPathIndex = mCallRecordCursor.getColumnIndex(BaseDatabaseHelper.RECORDS_COLUMNS.PATH);
}
}
@Override
public RecordRecycleViewAdapter.RecordViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View contentView = LayoutInflater.from(parent.getContext()).inflate(R.layout.record_list_item, parent, false);
RecordViewHolder viewHolder = new RecordViewHolder(contentView);
return viewHolder;
}
@Override
public void onBindViewHolder(RecordRecycleViewAdapter.RecordViewHolder holder, final int position) {
holder.itemView.setLongClickable(true);
if (mCallRecordCursor != null && mCallRecordCursor.moveToPosition(position)) {
long id = mCallRecordCursor.getLong(mIdIndex);
String phoneNumber = mCallRecordCursor.getString(mPhoneNumberIndex);
long seconds = mCallRecordCursor.getLong(mDurationIndex);
String callTime = mCallRecordCursor.getString(mCallTimeIndex);
String path = mCallRecordCursor.getString(mPathIndex);
String duration = String.format("%1$02d:%2$02d:%3$02d", seconds / 3600, seconds % 3600 / 60, seconds % 60);
RecordInfo info = new RecordInfo();
info.setId(id);
info.setPhoneNumber(phoneNumber);
info.setSecondsDuration(seconds);
info.setCallTime(callTime);
info.setPath(path);
holder.itemView.setTag(new ContextMenuRecyclerView.RecyclerItemMarker(position, info));
holder.mTextViewPhoneNumber.setText(phoneNumber);
holder.mTextViewDuration.setText(duration);
holder.mTextviewCallTime.setText(callTime);
Cursor cursor = queryContactByPhoneNumber(ContactsContract.CommonDataKinds.Phone.NUMBER + " = '" + phoneNumber + "'");
if (cursor != null) {
if (cursor.moveToNext()) {
long contactId = cursor.getInt(0);
Cursor contactCursor = queryContact(ContactsContract.Contacts._ID + "=" + contactId);
if (contactCursor != null) {
holder.mTextViewName.setText(contactCursor.getString(1));
contactCursor.close();
}
}
cursor.close();
}
}
}
@Override
public void onViewRecycled(RecordViewHolder holder) {
super.onViewRecycled(holder);
holder.itemView.setOnCreateContextMenuListener(null);
}
@Override
public int getItemCount() {
return mCallRecordCursor == null ? 0 : mCallRecordCursor.getCount();
}
public void changeCursor(Cursor cursor) {
if (cursor != mCallRecordCursor) {
if (mCallRecordCursor != null) {
mCallRecordCursor.close();
}
mCallRecordCursor = cursor;
updateCursorColumnIndex();
notifyDataSetChanged();
}
}
public class RecordViewHolder extends RecyclerView.ViewHolder {
private ImageView mImageViewAvatar;
private TextView mTextViewPhoneNumber;
private TextView mTextViewName;
private TextView mTextviewCallTime;
private TextView mTextViewDuration;
public RecordViewHolder(View itemView) {
super(itemView);
mImageViewAvatar = (ImageView) itemView.findViewById(R.id.imageViewAvatar);
mTextViewName = (TextView) itemView.findViewById(R.id.textViewName);
mTextViewPhoneNumber = (TextView) itemView.findViewById(R.id.textViewPhoneNumber);
mTextviewCallTime = (TextView) itemView.findViewById(R.id.textViewCallTime);
mTextViewDuration = (TextView) itemView.findViewById(R.id.textViewDuration);
}
}
}