package com.blackice.control.fragments; import java.io.File; import java.util.ArrayList; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.os.SystemProperties; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceActivity; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.provider.Settings; import android.text.Spannable; import android.util.Log; import android.widget.EditText; import com.blackice.control.R; import com.blackice.control.BlackICEPreferenceFragment; import com.blackice.control.util.CMDProcessor; import com.blackice.control.util.Helpers; public class UserInterface extends BlackICEPreferenceFragment implements OnPreferenceChangeListener { public static final String TAG = "UserInterface"; private static final String PREF_CRT_ON = "crt_on"; private static final String PREF_CRT_OFF = "crt_off"; private static final String PREF_IME_SWITCHER = "ime_switcher"; private static final String PREF_ENABLE_VOLUME_OPTIONS = "enable_volume_options"; private static final String PREF_LONGPRESS_TO_KILL = "longpress_to_kill"; private static final String PREF_ROTATION_ANIMATION = "rotation_animation_delay"; private static final String PREF_180 = "rotate_180"; private static final String PREF_HOME_LONGPRESS = "long_press_home"; private static final String PREF_RECENT_APP_SWITCHER = "recent_app_switcher"; private static final String PREF_LESS_NOTIFICATION_SOUNDS = "less_notification_sounds"; private static final String PREF_LED_SCREEN_ON = "led_screen_on"; CheckBoxPreference mCrtOnAnimation; CheckBoxPreference mCrtOffAnimation; CheckBoxPreference mShowImeSwitcher; CheckBoxPreference mEnableVolumeOptions; CheckBoxPreference mLongPressToKill; CheckBoxPreference mAllow180Rotation; ListPreference mAnimationRotationDelay; ListPreference mHomeLongpress; Preference mLcdDensity; CheckBoxPreference mDisableBootAnimation; CheckBoxPreference mDisableBootAudio; CheckBoxPreference mDisableBugMailer; CheckBoxPreference mLedScreenOn; ListPreference mRecentAppSwitcher; ListPreference mAnnoyingNotifications; int newDensityValue; DensityChanger densityFragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.prefs_ui); PreferenceScreen prefs = getPreferenceScreen(); mCrtOffAnimation = (CheckBoxPreference) findPreference(PREF_CRT_OFF); mCrtOffAnimation.setChecked(Settings.System.getInt(getActivity().getContentResolver(), Settings.System.CRT_OFF_ANIMATION, 1) == 1); mCrtOnAnimation = (CheckBoxPreference) findPreference(PREF_CRT_ON); mCrtOnAnimation.setChecked(Settings.System.getInt(getActivity().getContentResolver(), Settings.System.CRT_ON_ANIMATION, 0) == 1); mShowImeSwitcher = (CheckBoxPreference) findPreference(PREF_IME_SWITCHER); mShowImeSwitcher.setChecked(Settings.System.getInt(getActivity().getContentResolver(), Settings.System.SHOW_STATUSBAR_IME_SWITCHER, 1) == 1); mEnableVolumeOptions = (CheckBoxPreference) findPreference(PREF_ENABLE_VOLUME_OPTIONS); mEnableVolumeOptions.setChecked(Settings.System.getInt(getActivity().getContentResolver(), Settings.System.ENABLE_VOLUME_OPTIONS, 0) == 1); mLongPressToKill = (CheckBoxPreference) findPreference(PREF_LONGPRESS_TO_KILL); mLongPressToKill.setChecked(Settings.Secure.getInt(getActivity().getContentResolver(), Settings.Secure.KILL_APP_LONGPRESS_BACK, 0) == 1); mAnimationRotationDelay = (ListPreference) findPreference(PREF_ROTATION_ANIMATION); mAnimationRotationDelay.setOnPreferenceChangeListener(this); mAnimationRotationDelay.setValue(Settings.System.getInt(getActivity() .getContentResolver(), Settings.System.ACCELEROMETER_ROTATION_SETTLE_TIME, 200) + ""); mAllow180Rotation = (CheckBoxPreference) findPreference(PREF_180); mAllow180Rotation.setChecked(Settings.System.getInt(getActivity().getContentResolver(), Settings.System.ACCELEROMETER_ROTATION_ANGLES, (1 | 2 | 8)) == (1 | 2 | 4 | 8)); mRecentAppSwitcher = (ListPreference) findPreference(PREF_RECENT_APP_SWITCHER); mRecentAppSwitcher.setOnPreferenceChangeListener(this); mRecentAppSwitcher.setValue(Integer.toString(Settings.System.getInt(getActivity() .getContentResolver(), Settings.System.RECENT_APP_SWITCHER, 0))); mAnnoyingNotifications = (ListPreference) findPreference(PREF_LESS_NOTIFICATION_SOUNDS); mAnnoyingNotifications.setOnPreferenceChangeListener(this); mAnnoyingNotifications.setValue(Integer.toString(Settings.System.getInt(getActivity() .getContentResolver(), Settings.System.MUTE_ANNOYING_NOTIFICATIONS_THRESHOLD, 0))); mLedScreenOn = (CheckBoxPreference) findPreference(PREF_LED_SCREEN_ON); mLedScreenOn.setChecked(Settings.Secure.getInt(getActivity().getContentResolver(), Settings.Secure.LED_SCREEN_ON, 0) == 1); mLcdDensity = findPreference("lcd_density_setup"); String currentProperty = SystemProperties.get("ro.sf.lcd_density"); try { newDensityValue = Integer.parseInt(currentProperty); } catch (Exception e) { getPreferenceScreen().removePreference(mLcdDensity); } mLcdDensity.setSummary("Current LCD Density: " + currentProperty); mDisableBootAnimation = (CheckBoxPreference) findPreference("disable_bootanimation"); mDisableBootAnimation.setChecked(!new File("/system/media/bootanimation.zip").exists()); if (mDisableBootAnimation.isChecked()) mDisableBootAnimation.setSummary(R.string.disable_bootanimation_summary); mDisableBootAudio = (CheckBoxPreference) findPreference("disable_bootaudio"); if(!new File("/system/media/boot_audio.mp3").exists() && !new File("/system/media/boot_audio.unicorn").exists() ) { mDisableBootAudio.setEnabled(false); mDisableBootAudio.setSummary(R.string.disable_bootaudio_summary_disabled); } else { mDisableBootAudio.setChecked(!new File("/system/media/boot_audio.mp3").exists()); if (mDisableBootAudio.isChecked()) mDisableBootAudio.setSummary(R.string.disable_bootaudio_summary); } mDisableBugMailer = (CheckBoxPreference) findPreference("disable_bugmailer"); mDisableBugMailer.setChecked(!new File("/system/bin/bugmailer.sh").exists()); mHomeLongpress = (ListPreference) findPreference(PREF_HOME_LONGPRESS); mHomeLongpress.setOnPreferenceChangeListener(this); mHomeLongpress.setValue(Settings.System.getInt(getActivity() .getContentResolver(), Settings.System.NAVIGATION_BAR_HOME_LONGPRESS, 0) + ""); if (!getResources().getBoolean(com.android.internal.R.bool.config_enableCrtAnimations)) { prefs.removePreference((PreferenceGroup) findPreference("crt")); } else { // can't get this working in ICS just yet ((PreferenceGroup) findPreference("crt")).removePreference(mCrtOnAnimation); } if (!hasHardwareButtons) { ((PreferenceGroup) findPreference("misc")).removePreference(mLongPressToKill); ((PreferenceGroup) findPreference("misc")).removePreference(mHomeLongpress); } if (mTablet) { ((PreferenceGroup) findPreference("misc")).removePreference(mHomeLongpress); } if (!hasNotificationLed) { ((PreferenceGroup) findPreference("misc")).removePreference(mLedScreenOn); } } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mCrtOffAnimation) { boolean checked = ((CheckBoxPreference) preference).isChecked(); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.CRT_OFF_ANIMATION, checked ? 1 : 0); return true; } else if (preference == mCrtOnAnimation) { boolean checked = ((CheckBoxPreference) preference).isChecked(); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.CRT_ON_ANIMATION, checked ? 1 : 0); return true; } else if (preference == mShowImeSwitcher) { boolean checked = ((CheckBoxPreference) preference).isChecked(); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.SHOW_STATUSBAR_IME_SWITCHER, checked ? 1 : 0); return true; } else if (preference == mEnableVolumeOptions) { boolean checked = ((CheckBoxPreference) preference).isChecked(); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.ENABLE_VOLUME_OPTIONS, checked ? 1 : 0); return true; } else if (preference == mLongPressToKill) { boolean checked = ((CheckBoxPreference) preference).isChecked(); Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.KILL_APP_LONGPRESS_BACK, checked ? 1 : 0); return true; } else if (preference == mAllow180Rotation) { boolean checked = ((CheckBoxPreference) preference).isChecked(); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.ACCELEROMETER_ROTATION_ANGLES, checked ? (1 | 2 | 4 | 8) : (1 | 2 | 8)); return true; } else if (preference == mDisableBootAnimation) { boolean checked = ((CheckBoxPreference) preference).isChecked(); if (checked) { Helpers.getMount("rw"); new CMDProcessor().su .runWaitFor("mv /system/media/bootanimation.zip /system/media/bootanimation.blackice"); Helpers.getMount("ro"); preference.setSummary(R.string.disable_bootanimation_summary); } else { Helpers.getMount("rw"); new CMDProcessor().su .runWaitFor("mv /system/media/bootanimation.blackice /system/media/bootanimation.zip"); Helpers.getMount("ro"); preference.setSummary(""); } return true; } else if (preference == mDisableBootAudio) { boolean checked = ((CheckBoxPreference) preference).isChecked(); if (checked) { Helpers.getMount("rw"); new CMDProcessor().su .runWaitFor("mv /system/media/boot_audio.mp3 /system/media/boot_audio.blackice"); Helpers.getMount("ro"); preference.setSummary(R.string.disable_bootaudio_summary); } else { Helpers.getMount("rw"); new CMDProcessor().su .runWaitFor("mv /system/media/boot_audio.blackice /system/media/boot_audio.mp3"); Helpers.getMount("ro"); } return true; } else if (preference == mDisableBugMailer) { boolean checked = ((CheckBoxPreference) preference).isChecked(); if (checked) { Helpers.getMount("rw"); new CMDProcessor().su .runWaitFor("mv /system/bin/bugmailer.sh /system/bin/bugmailer.sh.blackice"); Helpers.getMount("ro"); } else { Helpers.getMount("rw"); new CMDProcessor().su .runWaitFor("mv /system/bin/bugmailer.sh.blackice /system/bin/bugmailer.sh"); Helpers.getMount("ro"); } return true; } else if (preference == mLcdDensity) { ((PreferenceActivity) getActivity()) .startPreferenceFragment(new DensityChanger(), true); return true; } else if (preference == mLedScreenOn) { boolean checked = ((CheckBoxPreference) preference).isChecked(); Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.LED_SCREEN_ON, checked ? 1 : 0); Log.i(TAG, "LED flash when screen ON is set to: " + checked); return true; } return super.onPreferenceTreeClick(preferenceScreen, preference); } @Override public void onPause() { super.onPause(); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mAnimationRotationDelay) { Settings.System.putInt(getActivity().getContentResolver(), Settings.System.ACCELEROMETER_ROTATION_SETTLE_TIME, Integer.parseInt((String) newValue)); return true; } else if (preference == mHomeLongpress) { Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NAVIGATION_BAR_HOME_LONGPRESS, Integer.parseInt((String) newValue)); return true; } else if (preference == mRecentAppSwitcher) { int val = Integer.parseInt((String) newValue); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.RECENT_APP_SWITCHER, val); Helpers.restartSystemUI(); return true; } else if (preference == mAnnoyingNotifications) { int val = Integer.parseInt((String) newValue); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.MUTE_ANNOYING_NOTIFICATIONS_THRESHOLD, val); return true; } return false; } public static void addButton(Context context, String key) { ArrayList<String> enabledToggles = Navbar .getButtonsStringArray(context); enabledToggles.add(key); Navbar.setButtonsFromStringArray(context, enabledToggles); } public static void removeButton(Context context, String key) { ArrayList<String> enabledToggles = Navbar .getButtonsStringArray(context); enabledToggles.remove(key); Navbar.setButtonsFromStringArray(context, enabledToggles); } }