package aws.apps.usbDeviceEnumerator.ui.debug.fragments; import android.content.Context; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.CharacterStyle; import android.text.style.ForegroundColorSpan; import java.util.regex.Matcher; import java.util.regex.Pattern; import aws.apps.usbDeviceEnumerator.R; import uk.co.alt236.usbdeviceenumerator.sysbususb.dump.ShellSysBusDumper; /*package*/ class DeviceDump { @SuppressWarnings("StringConcatenationInsideStringBufferAppend") public static CharSequence getDump(@NonNull final Context context, @NonNull final String directory) { final int color = ContextCompat.getColor(context, R.color.colorAccent); final SpannableStringBuilder sb = new SpannableStringBuilder(); sb.append("Directory '" + directory + "':\n\n"); final String rawDump = ShellSysBusDumper.getDump(directory); if (rawDump.isEmpty()) { sb.append("No data.\n\n"); sb.append(context.getString(R.string.debug_unexpected_result_explanation)); } else { sb.append(rawDump); colorize(sb, ShellSysBusDumper.DEVICE_START, color); colorize(sb, ShellSysBusDumper.DEVICE_END, color); } return sb; } private static void colorize(final SpannableStringBuilder sb, final String pattern, @ColorInt final int color) { final Pattern p = Pattern.compile(pattern); final Matcher m = p.matcher(sb.toString()); while (m.find()) { final CharacterStyle span = new ForegroundColorSpan(color); sb.setSpan(span, m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); } } }