summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/DeviceInfoSettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/DeviceInfoSettings.java')
-rw-r--r--src/com/android/settings/DeviceInfoSettings.java101
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;
+ }
}