private void addSkippedRow()

in app/src/main/java/com/google/reviewit/widget/UnifiedDiffView.java [350:464]


  private void addSkippedRow(
      int a, int b, List<String> skippedLines, boolean isFirst,
      boolean isLast) {
    final TableRow tr = new TableRow(getContext());
    tr.setLayoutParams(matchAndWrapTableRowLayout());

    tr.setTag(R.id.UNIFIED_DIFF_A, a);
    tr.setTag(R.id.UNIFIED_DIFF_B, b);
    tr.setTag(R.id.UNIFIED_DIFF_LINES, skippedLines);

    final LinearLayout l = new LinearLayout(getContext());
    l.setOrientation(HORIZONTAL);
    TableRow.LayoutParams params = matchAndWrapTableRowLayout();
    params.span = 4;
    l.setLayoutParams(params);
    l.setBackgroundColor(widgetUtil.color(R.color.lineSkipped));

    LinearLayout spacerLeft = new LinearLayout(getContext());
    params = wrapTableRowLayout();
    params.weight = 1;
    spacerLeft.setLayoutParams(params);
    l.addView(spacerLeft);

    final Button expandBeforeButton = createHyperlinkButton(
        getContext().getString(R.string.expand_before, CONTEXT_LINES));
    final Button expandAllButton = createHyperlinkButton(
        getContext().getString(
            R.string.skipped_common_lines, skippedLines.size()));
    final Button expandAfterButton = createHyperlinkButton(
        getContext().getString(R.string.expand_after, CONTEXT_LINES));

    if (!isFirst && skippedLines.size() > 2 * CONTEXT_LINES) {
      expandBeforeButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
          int row = indexOfChild(tr);
          int a = (int) tr.getTag(R.id.UNIFIED_DIFF_A);
          int b = (int) tr.getTag(R.id.UNIFIED_DIFF_B);
          List<String> lines =
              (List<String>) tr.getTag(R.id.UNIFIED_DIFF_LINES);
          List<String> linesToShow = lines.subList(0, CONTEXT_LINES);
          List<String> skippedLines =
              lines.subList(CONTEXT_LINES, lines.size());
          addUnchangedLines(a, b, linesToShow, row);
          tr.setTag(R.id.UNIFIED_DIFF_A, a + CONTEXT_LINES);
          tr.setTag(R.id.UNIFIED_DIFF_B, b + CONTEXT_LINES);
          tr.setTag(R.id.UNIFIED_DIFF_LINES, skippedLines);
          expandAllButton.setText(getContext()
              .getString(R.string.skipped_common_lines, skippedLines.size()));
          if (skippedLines.size() <= 2 * CONTEXT_LINES) {
            l.removeView(expandBeforeButton);
            l.removeView(expandAfterButton);
          }
          if (onSizeChangedListener != null) {
            onSizeChangedListener.onSizeChanged();
          }
        }
      });
      l.addView(expandBeforeButton);
    }

    expandAllButton.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        int row = indexOfChild(tr);
        int a = (int) tr.getTag(R.id.UNIFIED_DIFF_A);
        int b = (int) tr.getTag(R.id.UNIFIED_DIFF_B);
        List<String> lines = (List<String>) tr.getTag(R.id.UNIFIED_DIFF_LINES);
        removeView(tr);
        addUnchangedLines(a, b, lines, row);
        if (onSizeChangedListener != null) {
          onSizeChangedListener.onSizeChanged();
        }
      }
    });
    l.addView(expandAllButton);

    if (!isLast && skippedLines.size() > 2 * CONTEXT_LINES) {
      expandAfterButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
          int row = indexOfChild(tr);
          int a = (int) tr.getTag(R.id.UNIFIED_DIFF_A);
          int b = (int) tr.getTag(R.id.UNIFIED_DIFF_B);
          List<String> lines =
              (List<String>) tr.getTag(R.id.UNIFIED_DIFF_LINES);
          int skip = lines.size() - CONTEXT_LINES;
          List<String> linesToShow = lines.subList(skip, lines.size());
          List<String> skippedLines = lines.subList(0, skip);
          addUnchangedLines(a + skip, b + skip, linesToShow, row + 1);
          tr.setTag(R.id.UNIFIED_DIFF_LINES, skippedLines);
          expandAllButton.setText(getContext()
              .getString(R.string.skipped_common_lines, skippedLines.size()));
          if (skippedLines.size() <= 2 * CONTEXT_LINES) {
            l.removeView(expandBeforeButton);
            l.removeView(expandAfterButton);
          }
          if (onSizeChangedListener != null) {
            onSizeChangedListener.onSizeChanged();
          }
        }
      });
      l.addView(expandAfterButton);
    }

    LinearLayout spacerRight = new LinearLayout(getContext());
    params = wrapTableRowLayout();
    params.weight = 1;
    spacerRight.setLayoutParams(params);
    l.addView(spacerRight);

    tr.addView(l);

    addView(tr, matchAndWrapTableLayout());
  }