From a52ed87bb00b492af2d654b52f03bfbea804887f Mon Sep 17 00:00:00 2001 From: Bob Badour Date: Thu, 11 Aug 2022 20:47:26 -0700 Subject: Add stats to notice UI. https://screenshot.googleplex.com/3WFzphfDAifZZvF Bug: 241421504 Test: m droid dist Change-Id: I1b85a60345bedb108ba5186bdc4a4667890ba4e5 --- .../license/LicenseHtmlGeneratorFromXml.java | 181 +++++++++++++-------- .../license/LicenseHtmlGeneratorFromXmlTest.java | 23 ++- 2 files changed, 129 insertions(+), 75 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXml.java b/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXml.java index aaa6dd53a7d0..fb3f382af192 100644 --- a/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXml.java +++ b/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXml.java @@ -27,7 +27,6 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; @@ -76,14 +75,22 @@ class LicenseHtmlGeneratorFromXml { private static final String LIBRARY_TAIL_STRING = "\nFiles"; private static final String FILES_HEAD_STRING = "\n"; - private static final String HTML_MIDDLE_STRING = - "\n" - + "\n" - + ""; + private static final String CONTENT_HEAD_STRING = + "
"; + private static final String CONTENT_TAIL_STRING = "
"; - private static final String HTML_REAR_STRING = - ""; + private static final String IMAGES_HEAD_STRING = + "
Images\n
\n"; + + private static final String PATH_COUNTS_HEAD_STRING = + "
\n \n"; + private static final String PATH_COUNTS_TAIL_STRING = "
Path prefixCount
\n"; + + private static final String HTML_TAIL_STRING = + ""; private final List mXmlFiles; @@ -137,13 +144,13 @@ class LicenseHtmlGeneratorFromXml { try { writer = new PrintWriter(outputFile); - generateHtml(mFileNameToLibraryToContentIdMap, mContentIdToFileContentMap, writer, - noticeHeader); + generateHtml(mXmlFiles, mFileNameToLibraryToContentIdMap, mContentIdToFileContentMap, + writer, noticeHeader); writer.flush(); writer.close(); return true; - } catch (FileNotFoundException | SecurityException e) { + } catch (IOException | SecurityException e) { Log.e(TAG, "Failed to generate " + outputFile, e); if (writer != null) { @@ -271,14 +278,33 @@ class LicenseHtmlGeneratorFromXml { return result.toString(); } + private static String pathPrefix(String path) { + String prefix = path; + while (prefix.length() > 0 && prefix.substring(0, 1).equals("/")) { + prefix = prefix.substring(1); + } + int idx = prefix.indexOf("/"); + if (idx > 0) { + prefix = prefix.substring(0, idx); + } + return prefix; + } + @VisibleForTesting - static void generateHtml(Map>> fileNameToLibraryToContentIdMap, + static void generateHtml(List xmlFiles, + Map>> fileNameToLibraryToContentIdMap, Map contentIdToFileContentMap, PrintWriter writer, - String noticeHeader) { + String noticeHeader) throws IOException { List fileNameList = new ArrayList(); fileNameList.addAll(fileNameToLibraryToContentIdMap.keySet()); Collections.sort(fileNameList); + SortedMap prefixToCount = new TreeMap(); + for (String f : fileNameList) { + String prefix = pathPrefix(f); + prefixToCount.merge(prefix, 1, Integer::sum); + } + SortedMap> libraryToContentIdMap = new TreeMap(); for (Map> libraryToContentValue : fileNameToLibraryToContentIdMap.values()) { @@ -324,74 +350,95 @@ class LicenseHtmlGeneratorFromXml { writer.println(LIBRARY_TAIL_STRING); } - writer.println(FILES_HEAD_STRING); - - // Prints all the file list with a link to its license file content. - for (String fileName : fileNameList) { - for (Map.Entry> libToContentId : - fileNameToLibraryToContentIdMap.get(fileName).entrySet()) { - String libraryName = libToContentId.getKey(); - if (libraryName == null) { - libraryName = ""; - } - for (String contentId : libToContentId.getValue()) { - // Assigns an id to a newly referred license file content. - if (!contentIdToOrderMap.containsKey(contentId)) { - contentIdToOrderMap.put(contentId, count); + if (!fileNameList.isEmpty()) { + writer.println(FILES_HEAD_STRING); + // Prints all the file list with a link to its license file content. + for (String fileName : fileNameList) { + for (Map.Entry> libToContentId : + fileNameToLibraryToContentIdMap.get(fileName).entrySet()) { + String libraryName = libToContentId.getKey(); + if (libraryName == null) { + libraryName = ""; + } + for (String contentId : libToContentId.getValue()) { + // Assigns an id to a newly referred license file content. + if (!contentIdToOrderMap.containsKey(contentId)) { + contentIdToOrderMap.put(contentId, count); + + // An index in contentIdAndFileNamesList is the order of each element. + contentIdAndFileNamesList.add(new ContentIdAndFileNames(contentId)); + count++; + } - // An index in contentIdAndFileNamesList is the order of each element. - contentIdAndFileNamesList.add(new ContentIdAndFileNames(contentId)); - count++; + int id = contentIdToOrderMap.get(contentId); + ContentIdAndFileNames elem = contentIdAndFileNamesList.get(id); + List files = elem.mLibraryToFileNameMap.computeIfAbsent( + libraryName, k -> new ArrayList()); + files.add(fileName); + if (TextUtils.isEmpty(libraryName)) { + writer.format("
  • %s
  • \n", id, fileName); + } else { + writer.format("
  • %s - %s
  • \n", + id, fileName, libraryName); + } } + } + } + writer.println(FILES_TAIL_STRING); + } - int id = contentIdToOrderMap.get(contentId); - ContentIdAndFileNames elem = contentIdAndFileNamesList.get(id); - List files = elem.mLibraryToFileNameMap.computeIfAbsent( - libraryName, k -> new ArrayList()); - files.add(fileName); + if (!contentIdAndFileNamesList.isEmpty()) { + writer.println(CONTENT_HEAD_STRING); + // Prints all contents of the license files in order of id. + for (ContentIdAndFileNames contentIdAndFileNames : contentIdAndFileNamesList) { + // Assigns an id to a newly referred license file content (should never happen here) + if (!contentIdToOrderMap.containsKey(contentIdAndFileNames.mContentId)) { + contentIdToOrderMap.put(contentIdAndFileNames.mContentId, count); + count++; + } + int id = contentIdToOrderMap.get(contentIdAndFileNames.mContentId); + writer.format("\n", id); + for (Map.Entry> libraryFiles : + contentIdAndFileNames.mLibraryToFileNameMap.entrySet()) { + String libraryName = libraryFiles.getKey(); if (TextUtils.isEmpty(libraryName)) { - writer.format("
  • %s
  • \n", id, fileName); + writer.println("
    Notices for file(s):
    "); } else { - writer.format("
  • %s - %s
  • \n", - id, fileName, libraryName); + writer.format("
    %s used by:
    \n", + libraryName); + } + writer.println("
    "); + for (String fileName : libraryFiles.getValue()) { + writer.format("%s
    \n", fileName); } + writer.println("
    "); } + writer.println("
    ");
    +                writer.println(contentIdToFileContentMap.get(
    +                        contentIdAndFileNames.mContentId));
    +                writer.println("
    "); + writer.println(""); } + writer.println(CONTENT_TAIL_STRING); } - writer.println(HTML_MIDDLE_STRING); - - // Prints all contents of the license files in order of id. - for (ContentIdAndFileNames contentIdAndFileNames : contentIdAndFileNamesList) { - // Assigns an id to a newly referred license file content (should never happen here) - if (!contentIdToOrderMap.containsKey(contentIdAndFileNames.mContentId)) { - contentIdToOrderMap.put(contentIdAndFileNames.mContentId, count); - count++; + if (!xmlFiles.isEmpty()) { + writer.println(IMAGES_HEAD_STRING); + for (File file : xmlFiles) { + writer.format("
  • %s
  • \n", pathPrefix(file.getCanonicalPath())); } - int id = contentIdToOrderMap.get(contentIdAndFileNames.mContentId); - writer.format("\n", id); - for (Map.Entry> libraryFiles : - contentIdAndFileNames.mLibraryToFileNameMap.entrySet()) { - String libraryName = libraryFiles.getKey(); - if (TextUtils.isEmpty(libraryName)) { - writer.println("
    Notices for file(s):
    "); - } else { - writer.format("
    %s used by:
    \n", - libraryName); - } - writer.println("
    "); - for (String fileName : libraryFiles.getValue()) { - writer.format("%s
    \n", fileName); - } - writer.println("
    "); + writer.println(IMAGES_TAIL_STRING); + } + + if (!prefixToCount.isEmpty()) { + writer.println(PATH_COUNTS_HEAD_STRING); + for (Map.Entry entry : prefixToCount.entrySet()) { + writer.format(" %s%d\n", + entry.getKey(), entry.getValue()); } - writer.println("
    ");
    -            writer.println(contentIdToFileContentMap.get(
    -                    contentIdAndFileNames.mContentId));
    -            writer.println("
    "); - writer.println(""); + writer.println(PATH_COUNTS_TAIL_STRING); } - writer.println(HTML_REAR_STRING); + writer.println(HTML_TAIL_STRING); } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java index 7ce04f91458c..fe337d267f25 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java @@ -24,13 +24,16 @@ import org.robolectric.RobolectricTestRunner; import org.xmlpull.v1.XmlPullParserException; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringWriter; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -202,7 +205,8 @@ public class LicenseHtmlGeneratorFromXmlTest { } @Test - public void testGenerateHtml() { + public void testGenerateHtml() throws Exception { + List xmlFiles = new ArrayList<>(); Map>> fileNameToLibraryToContentIdMap = new HashMap<>(); Map contentIdToFileContentMap = new HashMap<>(); Map> toBoth = new HashMap<>(); @@ -218,13 +222,14 @@ public class LicenseHtmlGeneratorFromXmlTest { StringWriter output = new StringWriter(); LicenseHtmlGeneratorFromXml.generateHtml( - fileNameToLibraryToContentIdMap, contentIdToFileContentMap, + xmlFiles, fileNameToLibraryToContentIdMap, contentIdToFileContentMap, new PrintWriter(output), ""); assertThat(output.toString()).isEqualTo(EXPECTED_OLD_HTML_STRING); } @Test - public void testGenerateNewHtml() { + public void testGenerateNewHtml() throws Exception { + List xmlFiles = new ArrayList<>(); Map>> fileNameToLibraryToContentIdMap = new HashMap<>(); Map contentIdToFileContentMap = new HashMap<>(); Map> toBoth = new HashMap<>(); @@ -244,13 +249,14 @@ public class LicenseHtmlGeneratorFromXmlTest { StringWriter output = new StringWriter(); LicenseHtmlGeneratorFromXml.generateHtml( - fileNameToLibraryToContentIdMap, contentIdToFileContentMap, + xmlFiles, fileNameToLibraryToContentIdMap, contentIdToFileContentMap, new PrintWriter(output), ""); assertThat(output.toString()).isEqualTo(EXPECTED_NEW_HTML_STRING); } @Test - public void testGenerateHtmlWithCustomHeading() { + public void testGenerateHtmlWithCustomHeading() throws Exception { + List xmlFiles = new ArrayList<>(); Map>> fileNameToLibraryToContentIdMap = new HashMap<>(); Map contentIdToFileContentMap = new HashMap<>(); Map> toBoth = new HashMap<>(); @@ -266,13 +272,14 @@ public class LicenseHtmlGeneratorFromXmlTest { StringWriter output = new StringWriter(); LicenseHtmlGeneratorFromXml.generateHtml( - fileNameToLibraryToContentIdMap, contentIdToFileContentMap, + xmlFiles, fileNameToLibraryToContentIdMap, contentIdToFileContentMap, new PrintWriter(output), HTML_CUSTOM_HEADING); assertThat(output.toString()).isEqualTo(EXPECTED_OLD_HTML_STRING_WITH_CUSTOM_HEADING); } @Test - public void testGenerateNewHtmlWithCustomHeading() { + public void testGenerateNewHtmlWithCustomHeading() throws Exception { + List xmlFiles = new ArrayList<>(); Map>> fileNameToLibraryToContentIdMap = new HashMap<>(); Map contentIdToFileContentMap = new HashMap<>(); Map> toBoth = new HashMap<>(); @@ -292,7 +299,7 @@ public class LicenseHtmlGeneratorFromXmlTest { StringWriter output = new StringWriter(); LicenseHtmlGeneratorFromXml.generateHtml( - fileNameToLibraryToContentIdMap, contentIdToFileContentMap, + xmlFiles, fileNameToLibraryToContentIdMap, contentIdToFileContentMap, new PrintWriter(output), HTML_CUSTOM_HEADING); assertThat(output.toString()).isEqualTo(EXPECTED_NEW_HTML_STRING_WITH_CUSTOM_HEADING); } -- cgit v1.2.3-59-g8ed1b