import android.app.AlertDialog;
import android.app.Dialog;
+import android.content.ContentResolver;
import android.content.DialogInterface;
import android.os.BatteryManager;
+import android.os.Build;
import android.os.Bundle;
import android.os.SystemProperties;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
import android.preference.Preference;
-import android.preference.PreferenceActivity;
+import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
-import android.preference.CheckBoxPreference;
+import android.preference.Preference.OnPreferenceChangeListener;
import android.provider.Settings;
-import android.text.TextUtils;
/*
* Displays preferences for application developers.
*/
-public class DevelopmentSettings extends PreferenceActivity
- implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
+public class DevelopmentSettings extends PreferenceFragment
+ implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
+ OnPreferenceChangeListener {
private static final String ENABLE_ADB = "enable_adb";
private static final String KEEP_SCREEN_ON = "keep_screen_on";
private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
+ private static final String HDCP_CHECKING_KEY = "hdcp_checking";
+ private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
private CheckBoxPreference mEnableAdb;
private CheckBoxPreference mKeepScreenOn;
private Dialog mOkDialog;
@Override
- protected void onCreate(Bundle icicle) {
+ public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.development_prefs);
mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB);
mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON);
mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION);
+
+ removeHdcpOptionsForProduction();
+ }
+
+ private void removeHdcpOptionsForProduction() {
+ if ("user".equals(Build.TYPE)) {
+ Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
+ if (hdcpChecking != null) {
+ // Remove the preference
+ getPreferenceScreen().removePreference(hdcpChecking);
+ }
+ }
}
@Override
- protected void onResume() {
+ public void onResume() {
super.onResume();
- mEnableAdb.setChecked(Settings.Secure.getInt(getContentResolver(),
+ final ContentResolver cr = getActivity().getContentResolver();
+ mEnableAdb.setChecked(Settings.Secure.getInt(cr,
Settings.Secure.ADB_ENABLED, 0) != 0);
- mKeepScreenOn.setChecked(Settings.System.getInt(getContentResolver(),
+ mKeepScreenOn.setChecked(Settings.System.getInt(cr,
Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
- mAllowMockLocation.setChecked(Settings.Secure.getInt(getContentResolver(),
+ mAllowMockLocation.setChecked(Settings.Secure.getInt(cr,
Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
+ updateHdcpValues();
+ }
+
+ 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);
+ for (int i = 0; i < values.length; i++) {
+ if (currentValue.equals(values[i])) {
+ index = i;
+ break;
+ }
+ }
+ hdcpChecking.setValue(values[index]);
+ hdcpChecking.setSummary(summaries[index]);
+ hdcpChecking.setOnPreferenceChangeListener(this);
+ }
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
- // Those monkeys kept committing suicide, so we add this property
- // to disable this functionality
- if (!TextUtils.isEmpty(SystemProperties.get("monkey.running"))) {
+ if (Utils.isMonkeyRunning()) {
return false;
}
if (mEnableAdb.isChecked()) {
mOkClicked = false;
if (mOkDialog != null) dismissDialog();
- mOkDialog = new AlertDialog.Builder(this).setMessage(
- getResources().getString(R.string.adb_warning_message))
+ mOkDialog = new AlertDialog.Builder(getActivity()).setMessage(
+ getActivity().getResources().getString(R.string.adb_warning_message))
.setTitle(R.string.adb_warning_title)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, this)
.show();
mOkDialog.setOnDismissListener(this);
} else {
- Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 0);
+ Settings.Secure.putInt(getActivity().getContentResolver(),
+ Settings.Secure.ADB_ENABLED, 0);
}
} else if (preference == mKeepScreenOn) {
- Settings.System.putInt(getContentResolver(), Settings.System.STAY_ON_WHILE_PLUGGED_IN,
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.STAY_ON_WHILE_PLUGGED_IN,
mKeepScreenOn.isChecked() ?
(BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
} else if (preference == mAllowMockLocation) {
- Settings.Secure.putInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION,
+ Settings.Secure.putInt(getActivity().getContentResolver(),
+ Settings.Secure.ALLOW_MOCK_LOCATION,
mAllowMockLocation.isChecked() ? 1 : 0);
}
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
mOkClicked = true;
- Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 1);
+ Settings.Secure.putInt(getActivity().getContentResolver(),
+ Settings.Secure.ADB_ENABLED, 1);
} else {
// Reset the toggle
mEnableAdb.setChecked(false);
dismissDialog();
super.onDestroy();
}
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
+ SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
+ updateHdcpValues();
+ return true;
+ }
+ return false;
+ }
}