diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e29f04caf38..c89445392ac 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -64,6 +64,7 @@ + 1500 + + + Dalvik + ART + ART (debug) + + + + + libdvm.so + libart.so + libartd.so + + + + + Use Dalvik + Use ART + Use ART debug build + + Never check diff --git a/res/values/strings.xml b/res/values/strings.xml index 83951922262..21a4e043dc3 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3074,6 +3074,14 @@ Stay awake Screen will never sleep while charging + + + Select runtime + + Select runtime + + Reboot to change runtime from %1$s to %2$s? + Allow mock locations diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index 82657795c7d..eddc4115092 100644 --- a/res/xml/development_prefs.xml +++ b/res/xml/development_prefs.xml @@ -37,6 +37,13 @@ android:title="@string/keep_screen_on" android:summary="@string/keep_screen_on_summary"/> + + validValues = new ArrayList(); + ArrayList validSummaries = new ArrayList(); + String[] values = getResources().getStringArray(R.array.select_runtime_values); + String[] summaries = getResources().getStringArray(R.array.select_runtime_summaries); + for (int i = 0; i < values.length; i++) { + String value = values[i]; + String summary = summaries[i]; + if (new File("/system/lib/" + value).exists()) { + validValues.add(value); + validSummaries.add(summary); + } + } + int count = validValues.size(); + if (count <= 1) { + // no choices, so remove preference + removePreference(selectRuntime); + } else { + pref.setEntryValues(validValues.toArray(new String[count])); + pref.setEntries(validSummaries.toArray(new String[count])); + } + } + + private String currentRuntimeValue() { + return SystemProperties.get(SELECT_RUNTIME_PROPERTY, VMRuntime.getRuntime().vmLibrary()); + } + + private void updateRuntimeValue() { + ListPreference selectRuntime = (ListPreference) findPreference(SELECT_RUNTIME_KEY); + if (selectRuntime != null) { + String currentValue = currentRuntimeValue(); + String[] values = getResources().getStringArray(R.array.select_runtime_values); + String[] summaries = getResources().getStringArray(R.array.select_runtime_summaries); + int index = 0; + for (int i = 0; i < values.length; i++) { + if (currentValue.equals(values[i])) { + index = i; + break; + } + } + selectRuntime.setValue(values[index]); + selectRuntime.setSummary(summaries[index]); + selectRuntime.setOnPreferenceChangeListener(this); + } + } + private void updateHdcpValues() { - int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY); if (hdcpChecking != null) { String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY); String[] values = getResources().getStringArray(R.array.hdcp_checking_values); String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries); + int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values for (int i = 0; i < values.length; i++) { if (currentValue.equals(values[i])) { index = i; @@ -1180,7 +1244,34 @@ public class DevelopmentSettings extends PreferenceFragment @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - if (HDCP_CHECKING_KEY.equals(preference.getKey())) { + if (SELECT_RUNTIME_KEY.equals(preference.getKey())) { + final String oldRuntimeValue = VMRuntime.getRuntime().vmLibrary(); + final String newRuntimeValue = newValue.toString(); + if (!newRuntimeValue.equals(oldRuntimeValue)) { + final Context context = getActivity(); + final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setMessage(context.getResources().getString(R.string.select_runtime_warning_message, + oldRuntimeValue, newRuntimeValue)); + builder.setPositiveButton(android.R.string.ok, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + SystemProperties.set(SELECT_RUNTIME_PROPERTY, newRuntimeValue); + pokeSystemProperties(); + PowerManager pm = (PowerManager) + context.getSystemService(Context.POWER_SERVICE); + pm.reboot(null); + } + }); + builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + updateRuntimeValue(); + } + }); + builder.show(); + } + return true; + } else if (HDCP_CHECKING_KEY.equals(preference.getKey())) { SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString()); updateHdcpValues(); pokeSystemProperties();