diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:32:34 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:32:34 -0800 |
commit | afc4ab2ffbb8327ddce9907961295a32cbf49d0f (patch) | |
tree | 64baf0ce0e3c9fb39cc086994dbe9805b74e5bca /src/com/android/settings/DeviceInfoSettings.java | |
parent | 4e14e5ccbf1ef27220419849133d482a546d5c04 (diff) | |
download | packages_apps_Settings-afc4ab2ffbb8327ddce9907961295a32cbf49d0f.zip packages_apps_Settings-afc4ab2ffbb8327ddce9907961295a32cbf49d0f.tar.gz packages_apps_Settings-afc4ab2ffbb8327ddce9907961295a32cbf49d0f.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'src/com/android/settings/DeviceInfoSettings.java')
-rw-r--r-- | src/com/android/settings/DeviceInfoSettings.java | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java new file mode 100644 index 0000000..be01f7d --- /dev/null +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.Build; +import android.os.Bundle; +import android.os.SystemProperties; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceGroup; +import android.util.Config; +import android.util.Log; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DeviceInfoSettings extends PreferenceActivity { + + private static final String TAG = "DeviceInfoSettings"; + private static final boolean LOGD = false || Config.LOGD; + + private static final String KEY_CONTAINER = "container"; + private static final String KEY_TEAM = "team"; + private static final String KEY_CONTRIBUTORS = "contributors"; + private static final String KEY_TERMS = "terms"; + private static final String KEY_LICENSE = "license"; + private static final String KEY_COPYRIGHT = "copyright"; + private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings"; + + @Override + protected void onCreate(Bundle icicle) { + super.onCreate(icicle); + + addPreferencesFromResource(R.xml.device_info_settings); + + setStringSummary("firmware_version", Build.VERSION.RELEASE); + setValueSummary("baseband_version", "gsm.version.baseband"); + setStringSummary("device_model", Build.MODEL); + setStringSummary("build_number", Build.DISPLAY); + findPreference("kernel_version").setSummary(getFormattedKernelVersion()); + + /* + * Settings is a generic app and should not contain any device-specific + * info. + */ + + // These are contained in the "container" preference group + PreferenceGroup parentPreference = (PreferenceGroup) findPreference(KEY_CONTAINER); + Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_TERMS, + Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); + Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_LICENSE, + Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); + Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_COPYRIGHT, + Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); + Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_TEAM, + Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); + + // These are contained by the root preference screen + parentPreference = getPreferenceScreen(); + Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, + KEY_SYSTEM_UPDATE_SETTINGS, + Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); + Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_CONTRIBUTORS, + Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); + } + + private void setStringSummary(String preference, String value) { + try { + findPreference(preference).setSummary(value); + } catch (RuntimeException e) { + findPreference(preference).setSummary( + getResources().getString(R.string.device_info_default)); + } + } + + private void setValueSummary(String preference, String property) { + try { + findPreference(preference).setSummary( + SystemProperties.get(property, + getResources().getString(R.string.device_info_default))); + } catch (RuntimeException e) { + + } + } + + private String getFormattedKernelVersion() { + String procVersionStr; + + try { + BufferedReader reader = new BufferedReader(new FileReader("/proc/version"), 256); + try { + procVersionStr = reader.readLine(); + } finally { + reader.close(); + } + + 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); + + if (!m.matches()) { + Log.e(TAG, "Regex did not match on /proc/version: " + procVersionStr); + return "Unavailable"; + } else if (m.groupCount() < 4) { + Log.e(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(TAG, + "IO Exception when getting kernel version for Device Info screen", + e); + + return "Unavailable"; + } + } + +} |