@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;
  }