@Override public void onCreateContextMenu( ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); // Bail if not working with expandable long-press, or if not child if (!(menuInfo instanceof ExpandableListContextMenuInfo)) return; final ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo; final int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition); final int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition); // Skip long-press on expandable parents if (childPosition == -1) return; final AccountDisplay account = (AccountDisplay) mAdapter.getGroup(groupPosition); final GroupDelta child = (GroupDelta) mAdapter.getChild(groupPosition, childPosition); // Ignore when selective syncing unsupported final int syncMode = getSyncMode(account); if (syncMode == SYNC_MODE_UNSUPPORTED) return; if (child != null) { showRemoveSync(menu, account, child, syncMode); } else { showAddSync(menu, account, syncMode); } }
/** * Handle any clicks on {@link ExpandableListAdapter} children, which usually mean toggling its * visible state. */ @Override public boolean onChildClick( ExpandableListView parent, View view, int groupPosition, int childPosition, long id) { final CheckBox checkbox = (CheckBox) view.findViewById(android.R.id.checkbox); final AccountDisplay account = (AccountDisplay) mAdapter.getGroup(groupPosition); final GroupDelta child = (GroupDelta) mAdapter.getChild(groupPosition, childPosition); if (child != null) { checkbox.toggle(); child.putVisible(checkbox.isChecked()); } else { // Open context menu for bringing back unsynced this.openContextMenu(view); } return true; }