📄 chatview.java
字号:
return false; } return mCursor.updateShort(columnIndex, value); } public boolean updateInt(int columnIndex, int value) { if (columnIndex == mDeltaColumn) { return false; } return mCursor.updateInt(columnIndex, value); } public boolean updateLong(int columnIndex, long value) { if (columnIndex == mDeltaColumn) { return false; } return mCursor.updateLong(columnIndex, value); } public boolean updateFloat(int columnIndex, float value) { if (columnIndex == mDeltaColumn) { return false; } return mCursor.updateFloat(columnIndex, value); } public boolean updateDouble(int columnIndex, double value) { if (columnIndex == mDeltaColumn) { return false; } return mCursor.updateDouble(columnIndex, value); } public boolean updateToNull(int columnIndex) { if (columnIndex == mDeltaColumn) { return false; } return mCursor.updateToNull(columnIndex); } public boolean commitUpdates() { return mCursor.commitUpdates(); } public boolean commitUpdates(Map<? extends Long, ? extends Map<String,Object>> values) { return mCursor.commitUpdates(values); } public void abortUpdates() { mCursor.abortUpdates(); } public void deactivate() { mCursor.deactivate(); } public boolean requery() { return mCursor.requery(); } public void close() { mCursor.close(); } public boolean isClosed() { return mCursor.isClosed(); } public void registerContentObserver(ContentObserver observer) { mCursor.registerContentObserver(observer); } public void unregisterContentObserver(ContentObserver observer) { mCursor.unregisterContentObserver(observer); } public void registerDataSetObserver(DataSetObserver observer) { mCursor.registerDataSetObserver(observer); } public void unregisterDataSetObserver(DataSetObserver observer) { mCursor.unregisterDataSetObserver(observer); } public void setNotificationUri(ContentResolver cr, Uri uri) { mCursor.setNotificationUri(cr, uri); } public boolean getWantsAllOnMoveCalls() { return mCursor.getWantsAllOnMoveCalls(); } public Bundle getExtras() { return mCursor.getExtras(); } public Bundle respond(Bundle extras) { return mCursor.respond(extras); } public String[] getColumnNames() { return mColumnNames; } private void checkPosition() { int pos = mCursor.getPosition(); int count = mCursor.getCount(); if (-1 == pos || count == pos) { throw new CursorIndexOutOfBoundsException(pos, count); } } public byte[] getBlob(int column) { checkPosition(); if (column == mDeltaColumn) { return null; } return mCursor.getBlob(column); } public String getString(int column) { checkPosition(); if (column == mDeltaColumn) { long value = getDeltaValue(); return Long.toString(value); } return mCursor.getString(column); } public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) { checkPosition(); if (columnIndex == mDeltaColumn) { long value = getDeltaValue(); String strValue = Long.toString(value); int len = strValue.length(); char[] data = buffer.data; if (data == null || data.length < len) { buffer.data = strValue.toCharArray(); } else { strValue.getChars(0, len, data, 0); } buffer.sizeCopied = strValue.length(); } else { mCursor.copyStringToBuffer(columnIndex, buffer); } } public short getShort(int column) { checkPosition(); if (column == mDeltaColumn) { return (short)getDeltaValue(); } return mCursor.getShort(column); } public int getInt(int column) { checkPosition(); if (column == mDeltaColumn) { return (int)getDeltaValue(); } return mCursor.getInt(column); } public long getLong(int column) { //if (DBG) log("DeltaCursor.getLong: column=" + column + ", mDeltaColumn=" + mDeltaColumn); checkPosition(); if (column == mDeltaColumn) { return getDeltaValue(); } return mCursor.getLong(column); } public float getFloat(int column) { checkPosition(); if (column == mDeltaColumn) { return getDeltaValue(); } return mCursor.getFloat(column); } public double getDouble(int column) { checkPosition(); if (column == mDeltaColumn) { return getDeltaValue(); } return mCursor.getDouble(column); } public boolean isNull(int column) { checkPosition(); if (column == mDeltaColumn) { return false; } return mCursor.isNull(column); } private long getDeltaValue() { int pos = mCursor.getPosition(); //Log.i(LOG_TAG, "getDeltaValue: mPos=" + mPos); long t2, t1; if (pos == getCount()-1) { t1 = mCursor.getLong(mDateColumn); t2 = System.currentTimeMillis(); } else { mCursor.moveToPosition(pos + 1); t2 = mCursor.getLong(mDateColumn); mCursor.moveToPosition(pos); t1 = mCursor.getLong(mDateColumn); } return t2 - t1; } } private class MessageAdapter extends CursorAdapter implements AbsListView.OnScrollListener { private int mScrollState; private boolean mNeedRequeryCursor; private int mContactColumn; private int mBodyColumn; private int mDateColumn; private int mTypeColumn; private int mErrCodeColumn; private int mDeltaColumn; private ChatBackgroundMaker mBgMaker; private LayoutInflater mInflater; public MessageAdapter(Activity context, Cursor c) { super(context, c, false); mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mBgMaker = new ChatBackgroundMaker(context); if (c != null) { resolveColumnIndex(c); } } private void resolveColumnIndex(Cursor c) { mContactColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.CONTACT); mBodyColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.BODY); mDateColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.DATE); mTypeColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.TYPE); mErrCodeColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.ERROR_CODE); mDeltaColumn = c.getColumnIndexOrThrow(DeltaCursor.DELTA_COLUMN_NAME); } @Override public void changeCursor(Cursor cursor) { super.changeCursor(cursor); if (cursor != null) { resolveColumnIndex(cursor); } } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return mInflater.inflate(R.layout.new_message_item, parent, false); } @Override public void bindView(View view, Context context, Cursor cursor) { MessageView chatMsgView = (MessageView) view; int type = cursor.getInt(mTypeColumn); String contact = isGroupChat() ? cursor.getString(mContactColumn) : mNickName; String body = cursor.getString(mBodyColumn); long delta = cursor.getLong(mDeltaColumn); boolean showTimeStamp = (delta > SHOW_TIME_STAMP_INTERVAL); Date date = showTimeStamp ? new Date(cursor.getLong(mDateColumn)) : null; switch (type) { case Im.MessageType.INCOMING: chatMsgView.bindIncomingMessage(contact, body, date, mMarkup, isScrolling()); break; case Im.MessageType.OUTGOING: case Im.MessageType.POSTPONED: int errCode = cursor.getInt(mErrCodeColumn); if (errCode != 0) { chatMsgView.bindErrorMessage(errCode); } else { chatMsgView.bindOutgoingMessage(body, date, mMarkup, isScrolling()); } break; default: chatMsgView.bindPresenceMessage(contact, type, isGroupChat(), isScrolling()); } if (!isScrolling()) { mBgMaker.setBackground(chatMsgView, contact, type); } // if showTimeStamp is false for the latest message, then set a timer to query the // cursor again in a minute, so we can update the last message timestamp if no new // message is received if (cursor.getPosition() == cursor.getCount()-1) { if (Log.isLoggable(ImApp.LOG_TAG, Log.DEBUG)){ log("delta = " + delta + ", showTs=" + showTimeStamp); } if (!showTimeStamp) { scheduleRequery(SHOW_TIME_STAMP_INTERVAL); } else { cancelRequery(); } } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // do nothing } public void onScrollStateChanged(AbsListView view, int scrollState) { int oldState = mScrollState; mScrollState = scrollState; if (oldState == OnScrollListener.SCROLL_STATE_FLING) { if (mNeedRequeryCursor) { requeryCursor(); } else { notifyDataSetChanged(); } } } boolean isScrolling() { return mScrollState == OnScrollListener.SCROLL_STATE_FLING; } void setNeedRequeryCursor(boolean requeryCursor) { mNeedRequeryCursor = requeryCursor; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -