📄 contactlistview.java
字号:
public boolean isContactAtPosition(long packedPosition) { int type = ExpandableListView.getPackedPositionType(packedPosition); int groupPosition = ExpandableListView.getPackedPositionGroup(packedPosition); return (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) && !mAdapter.isPosForSubscription(groupPosition); } public boolean isContactSelected() { long pos = mContactsList.getSelectedPosition(); return isContactAtPosition(pos); } public boolean isConversationAtPosition(long packedPosition) { int type = ExpandableListView.getPackedPositionType(packedPosition); int groupPosition = ExpandableListView.getPackedPositionGroup(packedPosition); return (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) && mAdapter.isPosForOngoingConversation(groupPosition); } public boolean isConversationSelected () { long pos = mContactsList.getSelectedPosition(); return isConversationAtPosition(pos); } public boolean isContactsLoaded() { try { IContactListManager manager = mConn.getContactListManager(); return (manager.getState() == ContactListManager.LISTS_LOADED); } catch (RemoteException e) { mHandler.showServiceErrorAlert(); return false; } } public void removeContact() { removeContact(getSelectedContact()); } public void removeContactAtPosition(long packedPosition) { removeContact(getContactAtPosition(packedPosition)); } void removeContact(Cursor c) { if (c == null) { mHandler.showAlert(R.string.error, R.string.select_contact); } else { String nickname = c.getString(c.getColumnIndexOrThrow(Im.Contacts.NICKNAME)); final String address = c.getString(c.getColumnIndexOrThrow(Im.Contacts.USERNAME)); DialogInterface.OnClickListener confirmListener = new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int whichButton) { try { IContactListManager manager = mConn.getContactListManager(); int res = manager.removeContact(address); if (res != ImErrorInfo.NO_ERROR) { mHandler.showAlert(R.string.error, ErrorResUtils.getErrorRes(getResources(), res, address)); } } catch (RemoteException e) { mHandler.showServiceErrorAlert(); } } }; Resources r = getResources(); new AlertDialog.Builder(mContext) .setTitle(R.string.confirm) .setMessage(r.getString(R.string.confirm_delete_contact, nickname)) .setPositiveButton(R.string.yes, confirmListener) // default button .setNegativeButton(R.string.no, null) .setCancelable(false) .show(); clearFocusIfEmpty(c); } } public void blockContact() { blockContact(getSelectedContact()); } public void blockContactAtPosition(long packedPosition) { blockContact(getContactAtPosition(packedPosition)); } void blockContact(Cursor c) { if (c == null) { mHandler.showAlert(R.string.error, R.string.select_contact); } else { String nickname = c.getString(c.getColumnIndexOrThrow(Im.Contacts.NICKNAME)); final String address = c.getString(c.getColumnIndexOrThrow(Im.Contacts.USERNAME)); DialogInterface.OnClickListener confirmListener = new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int whichButton) { try { IContactListManager manager = mConn.getContactListManager(); int res = manager.blockContact(address); if (res != ImErrorInfo.NO_ERROR) { mHandler.showAlert(R.string.error, ErrorResUtils.getErrorRes(getResources(), res, address)); } } catch (RemoteException e) { mHandler.showServiceErrorAlert(); } } }; Resources r = getResources(); new AlertDialog.Builder(mContext) .setTitle(R.string.confirm) .setMessage(r.getString(R.string.confirm_block_contact, nickname)) .setPositiveButton(R.string.yes, confirmListener) // default button .setNegativeButton(R.string.no, null) .setCancelable(false) .show(); clearFocusIfEmpty(c); } } public Cursor getContactAtPosition(long packedPosition) { int type = ExpandableListView.getPackedPositionType(packedPosition); if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { int groupPosition = ExpandableListView.getPackedPositionGroup(packedPosition); int childPosition = ExpandableListView.getPackedPositionChild(packedPosition); return (Cursor) mAdapter.getChild(groupPosition, childPosition); } return null; } public Cursor getSelectedContact() { long pos = mContactsList.getSelectedPosition(); if (ExpandableListView.getPackedPositionType(pos) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { return (Cursor)mContactsList.getSelectedItem(); } return null; } public String getSelectedContactList() { long pos = mContactsList.getSelectedPosition(); int groupPos = ExpandableListView.getPackedPositionGroup(pos); if (groupPos == -1) { return null; } Cursor cursor = (Cursor)mAdapter.getGroup(groupPos); if (cursor == null) { return null; } return cursor.getString(cursor.getColumnIndexOrThrow(Im.ContactList.NAME)); } private void registerListeners() { try{ IContactListManager listManager = mConn.getContactListManager(); listManager.registerContactListListener(mContactListListener); listManager.registerSubscriptionListener(mSubscriptionListener); }catch(RemoteException e) { mHandler.showServiceErrorAlert(); } } private void unregisterListeners() { try{ IContactListManager listManager = mConn.getContactListManager(); listManager.unregisterContactListListener(mContactListListener); listManager.unregisterSubscriptionListener(mSubscriptionListener); }catch(RemoteException e) { mHandler.showServiceErrorAlert(); } } private final OnChildClickListener mOnChildClickListener = new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Cursor cursor = (Cursor)parent.getExpandableListAdapter().getChild( groupPosition, childPosition); int subscriptionType = cursor.getInt(ContactView.COLUMN_SUBSCRIPTION_TYPE); int subscriptionStatus = cursor.getInt(ContactView.COLUMN_SUBSCRIPTION_STATUS); if ((subscriptionType == Im.Contacts.SUBSCRIPTION_TYPE_FROM) && (subscriptionStatus == Im.Contacts.SUBSCRIPTION_STATUS_SUBSCRIBE_PENDING)){ long providerId = cursor.getLong(ContactView.COLUMN_CONTACT_PROVIDER); String username = cursor.getString(ContactView.COLUMN_CONTACT_USERNAME); Intent intent = new Intent(ImServiceConstants.ACTION_MANAGE_SUBSCRIPTION, ContentUris.withAppendedId(Im.Contacts.CONTENT_URI, id)); intent.putExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, providerId); intent.putExtra(ImServiceConstants.EXTRA_INTENT_FROM_ADDRESS, username); mScreen.startActivity(intent); } else { startChat(cursor); } return true; } }; static class SavedState extends BaseSavedState { int[] mExpandedGroups; SavedState(Parcelable superState, int[] expandedGroups) { super(superState); mExpandedGroups = expandedGroups; } private SavedState(Parcel in) { super(in); mExpandedGroups = in.createIntArray(); } @Override public void writeToParcel(Parcel out, int flags) { super.writeToParcel(out, flags); out.writeIntArray(mExpandedGroups); } public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); } public SavedState[] newArray(int size) { return new SavedState[size]; } }; } @Override public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); int[] expandedGroups = mAdapter == null ? null : mAdapter.getExpandedGroups(); return new SavedState(superState, expandedGroups); } @Override public void onRestoreInstanceState(Parcelable state) { SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); mSavedState = ss; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -