diff options
Diffstat (limited to 'src/com/android/settings/DeviceInfoSettings.java')
-rw-r--r-- | src/com/android/settings/DeviceInfoSettings.java | 101 |
1 files changed, 96 insertions, 5 deletions
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index 8fc41ea..949eaab 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -20,7 +20,9 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.os.Build; import android.os.Bundle; @@ -73,6 +75,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In private static final String KEY_KERNEL_VERSION = "kernel_version"; private static final String KEY_BUILD_NUMBER = "build_number"; private static final String KEY_DEVICE_MODEL = "device_model"; + private static final String KEY_DEVICE_NAME = "device_name"; private static final String KEY_SELINUX_STATUS = "selinux_status"; private static final String KEY_BASEBAND_VERSION = "baseband_version"; private static final String KEY_FIRMWARE_VERSION = "firmware_version"; @@ -82,6 +85,10 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In private static final String PROPERTY_EQUIPMENT_ID = "ro.ril.fccid"; private static final String KEY_DEVICE_FEEDBACK = "device_feedback"; private static final String KEY_SAFETY_LEGAL = "safetylegal"; + private static final String KEY_MOD_VERSION = "mod_version"; + private static final String KEY_MOD_BUILD_DATE = "build_date"; + private static final String KEY_MOD_API_LEVEL = "mod_api_level"; + private static final String KEY_CM_UPDATES = "cm_updates"; static final int TAPS_TO_BE_A_DEVELOPER = 7; @@ -123,12 +130,17 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In } setValueSummary(KEY_BASEBAND_VERSION, "gsm.version.baseband"); - setStringSummary(KEY_DEVICE_MODEL, Build.MODEL + getMsvSuffix()); setValueSummary(KEY_EQUIPMENT_ID, PROPERTY_EQUIPMENT_ID); setStringSummary(KEY_DEVICE_MODEL, Build.MODEL); setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY); findPreference(KEY_BUILD_NUMBER).setEnabled(true); findPreference(KEY_KERNEL_VERSION).setSummary(getFormattedKernelVersion()); + setValueSummary(KEY_MOD_VERSION, cyanogenmod.os.Build.CYANOGENMOD_DISPLAY_VERSION); + findPreference(KEY_MOD_VERSION).setEnabled(true); + setValueSummary(KEY_MOD_BUILD_DATE, "ro.build.date"); + setExplicitValueSummary(KEY_MOD_API_LEVEL, constructApiLevelString()); + findPreference(KEY_MOD_API_LEVEL).setEnabled(true); + findPreference(KEY_MOD_BUILD_DATE).setEnabled(true); if (!SELinux.isSELinuxEnabled()) { String status = getResources().getString(R.string.selinux_status_disabled); @@ -138,10 +150,20 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In setStringSummary(KEY_SELINUX_STATUS, status); } + setStringSummary(KEY_DEVICE_NAME, Build.PRODUCT); + removePreferenceIfBoolFalse(KEY_DEVICE_NAME, R.bool.config_displayDeviceName); + // Remove selinux information if property is not present removePreferenceIfPropertyMissing(getPreferenceScreen(), KEY_SELINUX_STATUS, PROPERTY_SELINUX_STATUS); + // Only the owner should see the Updater settings, if it exists + if (UserHandle.myUserId() == UserHandle.USER_OWNER) { + removePreferenceIfPackageNotInstalled(findPreference(KEY_CM_UPDATES)); + } else { + getPreferenceScreen().removePreference(findPreference(KEY_CM_UPDATES)); + } + // Remove Safety information preference if PROPERTY_URL_SAFETYLEGAL is not set removePreferenceIfPropertyMissing(getPreferenceScreen(), KEY_SAFETY_LEGAL, PROPERTY_URL_SAFETYLEGAL); @@ -172,6 +194,9 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In Utils.updatePreferenceToSpecificActivityOrRemove(act, parentPreference, KEY_SYSTEM_UPDATE_SETTINGS, Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); + /* Make sure the activity is provided by who we want... */ + if (findPreference(KEY_SYSTEM_UPDATE_SETTINGS) != null) + removePreferenceIfPackageNotInstalled(findPreference(KEY_SYSTEM_UPDATE_SETTINGS)); } else { // Remove for secondary users removePreference(KEY_SYSTEM_UPDATE_SETTINGS); @@ -184,7 +209,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In // Remove manual entry if none present. removePreferenceIfBoolFalse(KEY_MANUAL, R.bool.config_show_manual); - // Remove regulatory information if none present. + // Remove regulatory information if none present final Intent intent = new Intent(Settings.ACTION_SHOW_REGULATORY_INFO); if (getPackageManager().queryIntentActivities(intent, 0).isEmpty()) { Preference pref = findPreference(KEY_REGULATORY_INFO); @@ -224,6 +249,19 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In Log.e(LOG_TAG, "Unable to start activity " + intent.toString()); } } + } else if (preference.getKey().equals(KEY_MOD_BUILD_DATE)) { + System.arraycopy(mHits, 1, mHits, 0, mHits.length-1); + mHits[mHits.length-1] = SystemClock.uptimeMillis(); + if (mHits[0] >= (SystemClock.uptimeMillis()-500)) { + Intent intent = new Intent(); + intent.setClassName("com.android.systemui", + "com.android.systemui.tuner.TunerActivity$DemoModeActivity"); + try { + startActivity(intent); + } catch (Exception e) { + Log.e(LOG_TAG, "Unable to start activity " + intent.toString()); + } + } } else if (preference.getKey().equals(KEY_BUILD_NUMBER)) { // Don't enable developer options for secondary users. if (UserHandle.myUserId() != UserHandle.USER_OWNER) return true; @@ -246,7 +284,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In if (mDevHitToast != null) { mDevHitToast.cancel(); } - mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_on, + mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_on_cm, Toast.LENGTH_LONG); mDevHitToast.show(); // This is good time to index the Developer Options @@ -260,7 +298,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In mDevHitToast.cancel(); } mDevHitToast = Toast.makeText(getActivity(), getResources().getQuantityString( - R.plurals.show_dev_countdown, mDevHitCountdown, mDevHitCountdown), + R.plurals.show_dev_countdown_cm, mDevHitCountdown, mDevHitCountdown), Toast.LENGTH_SHORT); mDevHitToast.show(); } @@ -268,7 +306,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In if (mDevHitToast != null) { mDevHitToast.cancel(); } - mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_already, + mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_already_cm, Toast.LENGTH_LONG); mDevHitToast.show(); } @@ -281,6 +319,20 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In if (b.getBoolean(CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL)) { ciActionOnSysUpdate(b); } + } else if (preference.getKey().equals(KEY_MOD_VERSION)) { + System.arraycopy(mHits, 1, mHits, 0, mHits.length-1); + mHits[mHits.length-1] = SystemClock.uptimeMillis(); + if (mHits[0] >= (SystemClock.uptimeMillis()-500)) { + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.putExtra("is_cm", true); + intent.setClassName("android", + com.android.internal.app.PlatLogoActivity.class.getName()); + try { + startActivity(intent); + } catch (Exception e) { + Log.e(LOG_TAG, "Unable to start activity " + intent.toString()); + } + } } return super.onPreferenceTreeClick(preferenceScreen, preference); } @@ -348,6 +400,14 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In } } + private void setExplicitValueSummary(String preference, String value) { + try { + findPreference(preference).setSummary(value); + } catch (RuntimeException e) { + // No recovery + } + } + private void sendFeedback() { String reporterPackage = getFeedbackReporterPackage(getActivity()); if (TextUtils.isEmpty(reporterPackage)) { @@ -386,6 +446,14 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In } } + private static String constructApiLevelString() { + int sdkInt = cyanogenmod.os.Build.CM_VERSION.SDK_INT; + StringBuilder builder = new StringBuilder(); + builder.append(cyanogenmod.os.Build.getNameForSDKInt(sdkInt)) + .append(" (" + sdkInt + ")"); + return builder.toString(); + } + public static String formatKernelVersion(String rawKernelVersion) { // Example (see tests for more): // Linux version 3.0.31-g6fb96c9 (android-build@xxx.xxx.xxx.xxx.com) \ @@ -519,5 +587,28 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In } }; + private boolean removePreferenceIfPackageNotInstalled(Preference preference) { + String intentUri=((PreferenceScreen) preference).getIntent().toUri(1); + Pattern pattern = Pattern.compile("component=([^/]+)/"); + Matcher matcher = pattern.matcher(intentUri); + + String packageName=matcher.find()?matcher.group(1):null; + if(packageName != null) { + try { + PackageInfo pi = getPackageManager().getPackageInfo(packageName, + PackageManager.GET_ACTIVITIES); + if (!pi.applicationInfo.enabled) { + Log.e(LOG_TAG,"package "+packageName+" is disabled, hiding preference."); + getPreferenceScreen().removePreference(preference); + return true; + } + } catch (NameNotFoundException e) { + Log.e(LOG_TAG,"package "+packageName+" not installed, hiding preference."); + getPreferenceScreen().removePreference(preference); + return true; + } + } + return false; + } } |