diff options
author | Elliott Hughes <enh@google.com> | 2012-09-06 14:12:31 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2012-09-10 17:58:15 -0700 |
commit | d267d377fba9f6685dfd73af51d85c244f1f970f (patch) | |
tree | af2e192c3afc1cb66368ddb2500a9612272774a2 /src/com/android/settings/DeviceInfoSettings.java | |
parent | cfbc61de3f94a620153ca83a790e4d1b03a9078e (diff) | |
download | packages_apps_Settings-d267d377fba9f6685dfd73af51d85c244f1f970f.zip packages_apps_Settings-d267d377fba9f6685dfd73af51d85c244f1f970f.tar.gz packages_apps_Settings-d267d377fba9f6685dfd73af51d85c244f1f970f.tar.bz2 |
Fix /proc/version parsing in Settings.
Change-Id: I4bde0e4935eaa4c27067062443a051976daa115d
Diffstat (limited to 'src/com/android/settings/DeviceInfoSettings.java')
-rw-r--r-- | src/com/android/settings/DeviceInfoSettings.java | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index 152b8e2..748865a 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -189,7 +189,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment { * @return the first line, if any. * @throws IOException if the file couldn't be read */ - private String readLine(String filename) throws IOException { + private static String readLine(String filename) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(filename), 256); try { return reader.readLine(); @@ -198,37 +198,10 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment { } } - private String getFormattedKernelVersion() { - String procVersionStr; - + public static String getFormattedKernelVersion() { try { - procVersionStr = readLine(FILENAME_PROC_VERSION); - - final String PROC_VERSION_REGEX = - "\\w+\\s+" + /* ignore: Linux */ - "\\w+\\s+" + /* ignore: version */ - "([^\\s]+)\\s+" + /* group 1: 2.6.22-omap1 */ - "\\(([^\\s@]+(?:@[^\\s.]+)?)[^)]*\\)\\s+" + /* group 2: (xxxxxx@xxxxx.constant) */ - "\\((?:[^(]*\\([^)]*\\))?[^)]*\\)\\s+" + /* ignore: (gcc ..) */ - "([^\\s]+)\\s+" + /* group 3: #26 */ - "(?:PREEMPT\\s+)?" + /* ignore: PREEMPT (optional) */ - "(.+)"; /* group 4: date */ - - Pattern p = Pattern.compile(PROC_VERSION_REGEX); - Matcher m = p.matcher(procVersionStr); + return formatKernelVersion(readLine(FILENAME_PROC_VERSION)); - if (!m.matches()) { - Log.e(LOG_TAG, "Regex did not match on /proc/version: " + procVersionStr); - return "Unavailable"; - } else if (m.groupCount() < 4) { - Log.e(LOG_TAG, "Regex match on /proc/version only returned " + m.groupCount() - + " groups"); - return "Unavailable"; - } else { - return (new StringBuilder(m.group(1)).append("\n").append( - m.group(2)).append(" ").append(m.group(3)).append("\n") - .append(m.group(4))).toString(); - } } catch (IOException e) { Log.e(LOG_TAG, "IO Exception when getting kernel version for Device Info screen", @@ -238,6 +211,34 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment { } } + public static String formatKernelVersion(String rawKernelVersion) { + // Example (see tests for more): + // Linux version 3.0.31-g6fb96c9 (android-build@xxx.xxx.xxx.xxx.com) \ + // (gcc version 4.6.x-xxx 20120106 (prerelease) (GCC) ) #1 SMP PREEMPT \ + // Thu Jun 28 11:02:39 PDT 2012 + + final String PROC_VERSION_REGEX = + "Linux version (\\S+) " + /* group 1: "3.0.31-g6fb96c9" */ + "\\((\\S+?)\\) " + /* group 2: "x@y.com" (kernel builder) */ + "(?:\\(gcc.+? \\)) " + /* ignore: GCC version information */ + "(#\\d+) " + /* group 3: "#1" */ + "(?:.*?)?" + /* ignore: optional SMP, PREEMPT, and any CONFIG_FLAGS */ + "((Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)"; /* group 4: "Thu Jun 28 11:02:39 PDT 2012" */ + + Matcher m = Pattern.compile(PROC_VERSION_REGEX).matcher(rawKernelVersion); + if (!m.matches()) { + Log.e(LOG_TAG, "Regex did not match on /proc/version: " + rawKernelVersion); + return "Unavailable"; + } else if (m.groupCount() < 4) { + Log.e(LOG_TAG, "Regex match on /proc/version only returned " + m.groupCount() + + " groups"); + return "Unavailable"; + } + return m.group(1) + "\n" + // 3.0.31-g6fb96c9 + m.group(2) + " " + m.group(3) + "\n" + // x@y.com #1 + m.group(4); // Thu Jun 28 11:02:39 PDT 2012 + } + /** * Returns " (ENGINEERING)" if the msv file has a zero value, else returns "". * @return a string to append to the model number description. |