public void openDialog( String title, final int min, final int max, final Preference pref, final String path, final String key) { Resources res = context.getResources(); String cancel = res.getString(R.string.cancel); String ok = res.getString(R.string.ok); final EditText settingText; LayoutInflater factory = LayoutInflater.from(context); final View alphaDialog = factory.inflate(R.layout.seekbar_dialog, null); final SeekBar seekbar = (SeekBar) alphaDialog.findViewById(R.id.seek_bar); seekbar.setMax(max - min); int currentProgress = min; if (key.equals("pref_viber")) { currentProgress = Integer.parseInt(Helpers.readOneLine(path)); } else { currentProgress = Integer.parseInt(vib.get_val(path)); } if (currentProgress > max) currentProgress = max - min; else if (currentProgress < min) currentProgress = 0; else currentProgress = currentProgress - min; seekbar.setProgress(currentProgress); settingText = (EditText) alphaDialog.findViewById(R.id.setting_text); settingText.setText(Integer.toString(currentProgress + min)); settingText.setOnEditorActionListener( new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { int val = Integer.parseInt(settingText.getText().toString()) - min; seekbar.setProgress(val); return true; } return false; } }); settingText.addTextChangedListener( new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) { try { int val = Integer.parseInt(s.toString()); if (val > max) { s.replace(0, s.length(), Integer.toString(max)); val = max; } seekbar.setProgress(val - min); } catch (NumberFormatException ex) { } } }); OnSeekBarChangeListener seekBarChangeListener = new OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) { final int mSeekbarProgress = seekbar.getProgress(); if (fromUser) { settingText.setText(Integer.toString(mSeekbarProgress + min)); } } @Override public void onStopTrackingTouch(SeekBar seekbar) {} @Override public void onStartTrackingTouch(SeekBar seekbar) {} }; seekbar.setOnSeekBarChangeListener(seekBarChangeListener); new AlertDialog.Builder(context) .setTitle(title) .setView(alphaDialog) .setNegativeButton( cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // nothing } }) .setPositiveButton( ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int val = min; if (!settingText.getText().toString().equals("")) val = Integer.parseInt(settingText.getText().toString()); if (val < min) val = min; seekbar.setProgress(val - min); int newProgress = seekbar.getProgress() + min; new CMDProcessor() .su.runWaitFor("busybox echo " + Integer.toString(newProgress) + " > " + path); String v; if (key.equals("pref_viber")) { v = vib.get_val(path); Vibrator vb = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); vb.vibrate(1000); } else { v = Helpers.readOneLine(path); } final SharedPreferences.Editor editor = mPreferences.edit(); editor.putInt(key, Integer.parseInt(v)).commit(); pref.setSummary(v); } }) .create() .show(); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getActivity(); mPreferences = PreferenceManager.getDefaultSharedPreferences(context); mPreferences.registerOnSharedPreferenceChangeListener(this); addPreferencesFromResource(R.layout.advanced); sreadahead = getResources().getString(R.string.ps_read_ahead, ""); mReadAhead = (ListPreference) findPreference(PREF_READ_AHEAD); mBltimeout = findPreference(PREF_BLTIMEOUT); mBltouch = (CheckBoxPreference) findPreference(PREF_BLTOUCH); mBln = (CheckBoxPreference) findPreference(PREF_BLN); mWifiPM = (CheckBoxPreference) findPreference("pref_wifi_pm"); mTouchScr = findPreference("touchscr_settings"); mViber = findPreference("pref_viber"); mVM = findPreference("vm_settings"); mDsync = (CheckBoxPreference) findPreference(PREF_DSYNC); mPFK = findPreference("pfk_settings"); mDynamicWriteBackOn = (CheckBoxPreference) findPreference(PREF_DYNAMIC_DIRTY_WRITEBACK); mDynamicWriteBackActive = findPreference(PREF_DIRTY_WRITEBACK_ACTIVE); mDynamicWriteBackSuspend = findPreference(PREF_DIRTY_WRITEBACK_SUSPEND); if (!new File(DSYNC_PATH).exists()) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("dsync"); getPreferenceScreen().removePreference(hideCat); } else { mDsync.setChecked(Helpers.readOneLine(DSYNC_PATH).equals("1")); } if (!new File(PFK_HOME_ENABLED).exists() || !new File(PFK_MENUBACK_ENABLED).exists()) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("pfk"); getPreferenceScreen().removePreference(hideCat); } if (!new File(BL_TIMEOUT_PATH).exists()) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("bltimeout"); getPreferenceScreen().removePreference(hideCat); } else { mBltimeout.setSummary(Helpers.readOneLine(BL_TIMEOUT_PATH)); } if (!new File(BL_TOUCH_ON_PATH).exists()) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("bltouch"); getPreferenceScreen().removePreference(hideCat); } else { mBltouch.setChecked(Helpers.readOneLine(BL_TOUCH_ON_PATH).equals("1")); } BLN_PATH = Helpers.bln_path(); if (BLN_PATH == null) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("bln"); getPreferenceScreen().removePreference(hideCat); } else { mBln.setChecked(Helpers.readOneLine(BLN_PATH).equals("1")); } if (no_touchscreen()) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("touch_scr"); getPreferenceScreen().removePreference(hideCat); } VIBE_PATH = vib.get_path(); if (VIBE_PATH == null) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("viber"); getPreferenceScreen().removePreference(hideCat); } else { mViber.setSummary(vib.get_val(VIBE_PATH)); } if (!new File(DYNAMIC_DIRTY_WRITEBACK_PATH).exists()) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("cat_dynamic_write_back"); getPreferenceScreen().removePreference(hideCat); } else { boolean ison = Helpers.readOneLine(DYNAMIC_DIRTY_WRITEBACK_PATH).equals("1"); mDynamicWriteBackOn.setChecked(ison); mDynamicWriteBackActive.setSummary(Helpers.readOneLine(DIRTY_WRITEBACK_ACTIVE_PATH)); mDynamicWriteBackSuspend.setSummary(Helpers.readOneLine(DIRTY_WRITEBACK_SUSPEND_PATH)); } WIFIPM_PATH = Helpers.wifipm_path(); if (WIFIPM_PATH == null) { PreferenceCategory hideCat = (PreferenceCategory) findPreference("wifi_pm"); getPreferenceScreen().removePreference(hideCat); } else { mWifiPM.setChecked(Helpers.readOneLine(WIFIPM_PATH).equals("1")); } final String readahead = Helpers.readOneLine(READ_AHEAD_PATH); mReadAhead.setValue(readahead); mReadAhead.setSummary(getString(R.string.ps_read_ahead, readahead + " kb")); setHasOptionsMenu(true); }
@Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mDsync) { if (Helpers.readOneLine(DSYNC_PATH).equals("0")) { new CMDProcessor().su.runWaitFor("busybox echo 1 > " + DSYNC_PATH); } else { new CMDProcessor().su.runWaitFor("busybox echo 0 > " + DSYNC_PATH); } return true; } else if (preference == mBltimeout) { openDialog( getString(R.string.bltimeout_title), 0, 5000, preference, BL_TIMEOUT_PATH, PREF_BLTIMEOUT); return true; } else if (preference == mBltouch) { if (Helpers.readOneLine(BL_TOUCH_ON_PATH).equals("0")) { new CMDProcessor().su.runWaitFor("busybox echo 1 > " + BL_TOUCH_ON_PATH); } else { new CMDProcessor().su.runWaitFor("busybox echo 0 > " + BL_TOUCH_ON_PATH); } return true; } else if (preference == mBln) { if (Helpers.readOneLine(BLN_PATH).equals("0")) { new CMDProcessor().su.runWaitFor("busybox echo 1 > " + BLN_PATH); } else { new CMDProcessor().su.runWaitFor("busybox echo 0 > " + BLN_PATH); } return true; } else if (preference == mTouchScr) { Intent intent = new Intent(context, TouchScreenSettings.class); startActivity(intent); return true; } else if (preference == mViber) { openDialog( getString(R.string.viber_title), vib.get_min(), vib.get_max(), preference, VIBE_PATH, "pref_viber"); return true; } else if (preference == mPFK) { Intent intent = new Intent(context, PFKActivity.class); startActivity(intent); return true; } else if (preference == mDynamicWriteBackOn) { if (Helpers.readOneLine(DYNAMIC_DIRTY_WRITEBACK_PATH).equals("0")) { new CMDProcessor().su.runWaitFor("busybox echo 1 > " + DYNAMIC_DIRTY_WRITEBACK_PATH); } else { new CMDProcessor().su.runWaitFor("busybox echo 0 > " + DYNAMIC_DIRTY_WRITEBACK_PATH); } return true; } else if (preference == mDynamicWriteBackActive) { openDialog( getString(R.string.dynamic_writeback_active_title), 0, 5000, preference, DIRTY_WRITEBACK_ACTIVE_PATH, PREF_DIRTY_WRITEBACK_ACTIVE); return true; } else if (preference == mDynamicWriteBackSuspend) { openDialog( getString(R.string.dynamic_writeback_suspend_title), 0, 5000, preference, DIRTY_WRITEBACK_SUSPEND_PATH, PREF_DIRTY_WRITEBACK_SUSPEND); return true; } else if (preference == mVM) { Intent intent = new Intent(context, VMSettings.class); startActivity(intent); return true; } else if (preference == mWifiPM) { if (Helpers.readOneLine(WIFIPM_PATH).equals("0")) { new CMDProcessor().su.runWaitFor("busybox echo 1 > " + WIFIPM_PATH); } else { new CMDProcessor().su.runWaitFor("busybox echo 0 > " + WIFIPM_PATH); } return true; } return super.onPreferenceTreeClick(preferenceScreen, preference); }