package com.dsht.kerneltweaker.fragments;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeoutException;
import com.dsht.kerneltweaker.CustomCheckBoxPreference;
import com.dsht.kerneltweaker.CustomListPreference;
import com.dsht.kerneltweaker.CustomPreference;
import com.dsht.kerneltweaker.Helpers;
import com.dsht.kerneltweaker.ListViewMultiChoiceModeListener;
import com.dsht.kerneltweaker.MainActivity;
import com.dsht.kerneltweaker.R;
import com.dsht.kerneltweaker.database.DataItem;
import com.dsht.kerneltweaker.database.DatabaseHandler;
import com.dsht.kernetweaker.cmdprocessor.CMDProcessor;
import com.dsht.settings.SettingsFragment;
import com.stericson.RootTools.RootTools;
import com.stericson.RootTools.exceptions.RootDeniedException;
import com.stericson.RootTools.execution.CommandCapture;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.text.InputType;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.EditText;
import android.widget.ListView;
public class KernelPreferenceFragment extends PreferenceFragment implements OnPreferenceChangeListener, OnPreferenceClickListener {
private CustomCheckBoxPreference mKernelFsync;
private CustomCheckBoxPreference mKernelDynFsync;
private CustomCheckBoxPreference mKernelF2s;
private CustomCheckBoxPreference mKernelF2w;
private CustomCheckBoxPreference mKernelFcharge;
private CustomCheckBoxPreference mDoubleTap;
private CustomCheckBoxPreference mSweep2wake;
private CustomCheckBoxPreference mSweep2sleep;
private CustomCheckBoxPreference mIntelliPlug;
private CustomCheckBoxPreference mEcoMode;
private CustomPreference mVibration;
private CustomPreference mAdvancedScheduler;
private CustomListPreference mCpuScheduler;
private CustomListPreference mCpuReadAhead;
private PreferenceCategory mSoundCategory;
private CustomPreference mSoundInfo;
private SharedPreferences mPrefs;
private PreferenceCategory mKernelCategory;
private Context mContext;
private PreferenceScreen mRootScreen;
private PreferenceCategory mSchedCategory;
private static final String FSYNC_FILE = "/sys/module/sync/parameters/fsync_enabled";
private static final String SCHEDULER_FILE = "/sys/block/mmcblk0/queue/scheduler";
private static final String READ_AHEAD_FILE = "/sys/block/mmcblk0/queue/read_ahead_kb";
private static final String FCHARGE_FILE = "/sys/kernel/fast_charge/force_fast_charge";
private static final String TEMP_FILE = "/sys/module/msm_thermal/parameters/temp_threshold";
private static final String SOUNDCONTROL_FILE = "/sys/kernel/sound_control_3";
private static final String HEADSET_BOOST_FILE = "/sys/devices/virtual/misc/soundcontrol/headset_boost";
private static final String MIC_BOOST_FILE = "/sys/devices/virtual/misc/soundcontrol/mic_boost";
private static final String SPEAKER_BOOST_FILE = "/sys/devices/virtual/misc/soundcontrol/speaker_boost";
private static final String VOLUME_BOOST_FILE = "/sys/devices/virtual/misc/soundcontrol/volume_boost";
private static final String category = "kernel";
private static final String TCP_OPTIONS = "sysctl net.ipv4.tcp_available_congestion_control";
private static final String TCP_CURRENT = "sysctl net.ipv4.tcp_congestion_control";
private static final String DT2W_FILE = "/sys/android_touch/doubletap2wake";
private static final String S2W_FILE = "/sys/android_touch/sweep2wake";
private static final String S2W_SLEEPONLY_FILE = "/sys/android_touch/s2w_s2sonly";
private static final String INTELLIPLUG_FILE = "/sys/module/intelli_plug/parameters/intelli_plug_active";
private static final String ECOMODE_FILE = "/sys/module/intelli_plug/parameters/eco_mode_active";
private static final String DYNFSYNC_FILE = "/sys/kernel/dyn_fsync/Dyn_fsync_active";
private static final String FAUXSOUND_FILE = "/sys/kernel/sound_control_3";
private static final String VIBRATION_FILE = "/sys/class/timed_output/vibrator/amp";
private static final String F2S_FILE = "sys/devices/virtual/htc_g_sensor/g_sensor/flick2sleep";
private static final String F2W_FILE = "sys/devices/virtual/htc_g_sensor/g_sensor/flick2wake";
private String color;
private DatabaseHandler db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_screen_kernel);
mContext = getActivity();
if(MainActivity.menu.isMenuShowing()) {
MainActivity.menu.toggle();
}
Helpers.setPermissions(DT2W_FILE);
Helpers.setPermissions(DYNFSYNC_FILE);
Helpers.setPermissions(ECOMODE_FILE);
Helpers.setPermissions(FAUXSOUND_FILE);
Helpers.setPermissions(FCHARGE_FILE);
Helpers.setPermissions(FSYNC_FILE);
Helpers.setPermissions(HEADSET_BOOST_FILE);
Helpers.setPermissions(INTELLIPLUG_FILE);
Helpers.setPermissions(MIC_BOOST_FILE);
Helpers.setPermissions(READ_AHEAD_FILE);
Helpers.setPermissions(S2W_FILE);
Helpers.setPermissions(S2W_SLEEPONLY_FILE);
Helpers.setPermissions(SCHEDULER_FILE);
Helpers.setPermissions(SPEAKER_BOOST_FILE);
Helpers.setPermissions(TEMP_FILE);
Helpers.setPermissions(VIBRATION_FILE);
Helpers.setPermissions(VOLUME_BOOST_FILE);
Helpers.setPermissions(TCP_CURRENT);
Helpers.setPermissions(TCP_OPTIONS);
Helpers.setPermissions(F2S_FILE);
Helpers.setPermissions(F2W_FILE);
mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
mSoundCategory = (PreferenceCategory) findPreference("key_sound_category");
mSchedCategory = (PreferenceCategory) findPreference("key_sched_cat");
mKernelFsync = (CustomCheckBoxPreference) findPreference("key_fsync_switch");
mKernelDynFsync = (CustomCheckBoxPreference) findPreference("key_dynfsync_switch");
mKernelF2s = (CustomCheckBoxPreference) findPreference("key_f2s_switch");
mKernelF2w = (CustomCheckBoxPreference) findPreference("key_f2w_switch");
mKernelFcharge = (CustomCheckBoxPreference) findPreference("key_fcharge_switch");
mCpuScheduler = (CustomListPreference) findPreference("key_cpu_sched");
mAdvancedScheduler = (CustomPreference) findPreference("key_advanced_scheduler");
mCpuReadAhead = (CustomListPreference) findPreference("key_cpu_readahead");
mSoundInfo = (CustomPreference) findPreference("key_kernel_info");
mKernelCategory = (PreferenceCategory) findPreference("key_kernel_tweaks");
mRootScreen = (PreferenceScreen) findPreference("key_pref_screen");
mDoubleTap = (CustomCheckBoxPreference) findPreference("key_dt2w_switch");
mSweep2wake = (CustomCheckBoxPreference) findPreference("key_s2w_switch");
mSweep2sleep = (CustomCheckBoxPreference) findPreference("key_s2ws_switch");
mIntelliPlug = (CustomCheckBoxPreference) findPreference("key_intelliplug_switch");
mEcoMode = (CustomCheckBoxPreference) findPreference("key_ecomode_switch");
mVibration = (CustomPreference) findPreference("key_vibration");
db = MainActivity.db;
mKernelFsync.setKey(FSYNC_FILE);
mKernelDynFsync.setKey(DYNFSYNC_FILE);
mKernelFcharge.setKey(FCHARGE_FILE);
mCpuScheduler.setKey(SCHEDULER_FILE);
mCpuReadAhead.setKey(READ_AHEAD_FILE);
mDoubleTap.setKey(DT2W_FILE);
mSweep2wake.setKey(S2W_FILE);
mSweep2sleep.setKey(S2W_SLEEPONLY_FILE);
mIntelliPlug.setKey(INTELLIPLUG_FILE);
mEcoMode.setKey(ECOMODE_FILE);
mVibration.setKey(VIBRATION_FILE);
mKernelF2s.setKey(F2S_FILE);
mKernelF2w.setKey(F2W_FILE);
mCpuScheduler.setKey(SCHEDULER_FILE);
mCpuReadAhead.setKey(READ_AHEAD_FILE);
mCpuScheduler.setCategory(category);
mCpuReadAhead.setCategory(category);
mKernelFsync.setCategory(category);
mKernelDynFsync.setCategory(category);
mKernelFcharge.setCategory(category);
mDoubleTap.setCategory(category);
mSweep2wake.setCategory(category);
mSweep2sleep.setCategory(category);
mIntelliPlug.setCategory(category);
mEcoMode.setCategory(category);
mVibration.setCategory(category);
mKernelF2s.setCategory(category);
mKernelF2w.setCategory(category);
String[] schedulers = Helpers.getAvailableSchedulers();
String[] readAheadKb = {"128","256","384","512","640","768","896","1024","1152",
"1280","1408","1536","1664","1792","1920","2048", "2176", "2304", "2432", "2560",
"2688", "2816", "2944", "3072", "3200", "3328", "3456", "3584", "3712", "3840", "3968", "4096"};
color = "";
if(MainActivity.mPrefs.getBoolean(SettingsFragment.KEY_ENABLE_GLOBAL, false)) {
int col = MainActivity.mPrefs.getInt(SettingsFragment.KEY_GLOBAL_COLOR, Color.parseColor("#FFFFFF"));
color = "#"+Integer.toHexString(col);
}else if(mPrefs.getBoolean(SettingsFragment.KEY_ENABLE_PERSONAL, false)) {
int col = MainActivity.mPrefs.getInt(SettingsFragment.KEY_KERNEL, Color.parseColor("#ff0099cc"));
color = "#"+Integer.toHexString(col);
}
else {
color = getResources().getStringArray(R.array.menu_colors)[5];
}
mKernelFsync.setTitleColor(color);
mKernelDynFsync.setTitleColor(color);
mKernelFcharge.setTitleColor(color);
mCpuScheduler.setTitleColor(color);
mAdvancedScheduler.setTitleColor(color);
mCpuReadAhead.setTitleColor(color);
mSoundInfo.setTitleColor("#ff4444");
mSoundInfo.setSummaryColor("#ff4444");
mSoundInfo.excludeFromDialog(true);
mSoundInfo.hideBoot(true);
mAdvancedScheduler.excludeFromDialog(true);
mAdvancedScheduler.hideBoot(true);
mDoubleTap.setTitleColor(color);
mSweep2wake.setTitleColor(color);
mSweep2sleep.setTitleColor(color);
mIntelliPlug.setTitleColor(color);
mEcoMode.setTitleColor(color);
mVibration.setTitleColor(color);
mKernelF2s.setTitleColor(color);
mKernelF2w.setTitleColor(color);
mCpuScheduler.setEntries(schedulers);
mCpuScheduler.setEntryValues(schedulers);
mCpuReadAhead.setEntries(readAheadKb);
mCpuReadAhead.setEntryValues(readAheadKb);
mCpuScheduler.setSummary(Helpers.getCurrentScheduler());
mCpuReadAhead.setSummary(Helpers.getFileContent(new File(READ_AHEAD_FILE)));
mAdvancedScheduler.setOnPreferenceClickListener(this);
mCpuScheduler.setOnPreferenceChangeListener(this);
mCpuReadAhead.setOnPreferenceChangeListener(this);
mVibration.setOnPreferenceClickListener(this);
mKernelFsync.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo Y > "+FSYNC_FILE;
value = "Y";
} else {
cmd = "echo N > "+FSYNC_FILE;
value = "N";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mKernelDynFsync.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+DYNFSYNC_FILE;
value = "1";
} else {
cmd = "echo 0 > "+DYNFSYNC_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mDoubleTap.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+DT2W_FILE;
value = "1";
} else {
cmd = "echo 0 > "+DT2W_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mSweep2wake.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+S2W_FILE;
value = "1";
} else {
cmd = "echo 0 > "+S2W_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mSweep2sleep.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+S2W_SLEEPONLY_FILE;
value ="1";
} else {
cmd = "echo 0 > "+S2W_SLEEPONLY_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mKernelF2s.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+F2S_FILE;
value = "1";
} else {
cmd = "echo 0 > "+F2S_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mKernelF2w.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+F2W_FILE;
value = "1";
} else {
cmd = "echo 0 > "+F2W_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mIntelliPlug.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+INTELLIPLUG_FILE;
value = "1";
} else {
cmd = "echo 0 > "+INTELLIPLUG_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
mEcoMode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
SharedPreferences.Editor editor = mPrefs.edit();
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+ECOMODE_FILE;
value = "1";
} else {
cmd = "echo 0 > "+ECOMODE_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
editor.commit();
return true;
}
});
mKernelFcharge.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String cmd = null;
String value = null;
if (newValue.toString().equals("true")) {
cmd = "echo 1 > "+FCHARGE_FILE;
value = "1";
} else {
cmd = "echo 0 > "+FCHARGE_FILE;
value = "0";
}
CMDProcessor.runSuCommand(cmd);
updateDb(preference, value, ((CustomCheckBoxPreference) preference).isBootChecked());
return true;
}
});
if(!new File(FSYNC_FILE).exists()) {
mKernelCategory.removePreference(mKernelFsync);
} else {
String fsyncState = Helpers.getFileContent(new File(FSYNC_FILE));
if(fsyncState.equals("Y")) {
mKernelFsync.setChecked(true);
mKernelFsync.setValue("Y");
}else if(fsyncState.equals("N")) {
mKernelFsync.setChecked(false);
mKernelFsync.setValue("N");
}
}
if(!new File(DYNFSYNC_FILE).exists()) {
mKernelCategory.removePreference(mKernelDynFsync);
} else {
String fsyncState = Helpers.getFileContent(new File(DYNFSYNC_FILE));
if(fsyncState.equals("1")) {
mKernelDynFsync.setChecked(true);
mKernelDynFsync.setValue("1");
}else if(fsyncState.equals("0")) {
mKernelDynFsync.setChecked(false);
mKernelDynFsync.setValue("0");
}
}
if(!new File(DT2W_FILE).exists()) {
mKernelCategory.removePreference(mDoubleTap);
} else {
String dtState = Helpers.getFileContent(new File(DT2W_FILE));
if(dtState.equals("1")) {
mDoubleTap.setChecked(true);
mDoubleTap.setValue("1");
}else if(dtState.equals("0")) {
mDoubleTap.setChecked(false);
mDoubleTap.setValue("0");
}
}
if(!new File(S2W_FILE).exists()) {
mKernelCategory.removePreference(mSweep2wake);
} else {
String s2wState = Helpers.getFileContent(new File(S2W_FILE));
if(s2wState.equals("1")) {
mSweep2wake.setChecked(true);
mSweep2wake.setValue("1");
}else if(s2wState.equals("0")) {
mSweep2wake.setChecked(false);
mSweep2wake.setValue("0");
}
}
if(!new File(F2S_FILE).exists()) {
mKernelCategory.removePreference(mKernelF2s);
} else {
String dtState = Helpers.getFileContent(new File(F2S_FILE));
if(dtState.equals("1")) {
mKernelF2s.setChecked(true);
mKernelF2s.setValue("1");
}else if(dtState.equals("0")) {
mKernelF2s.setChecked(false);
mKernelF2s.setValue("0");
}
}
if(!new File(F2W_FILE).exists()) {
mKernelCategory.removePreference(mKernelF2w);
} else {
String dtState = Helpers.getFileContent(new File(F2W_FILE));
if(dtState.equals("1")) {
mKernelF2w.setChecked(true);
mKernelF2w.setValue("1");
}else if(dtState.equals("0")) {
mKernelF2w.setChecked(false);
mKernelF2w.setValue("0");
}
}
if(!new File(S2W_SLEEPONLY_FILE).exists()) {
mKernelCategory.removePreference(mSweep2sleep);
} else {
String s2wsState = Helpers.getFileContent(new File(S2W_SLEEPONLY_FILE));
if(s2wsState.equals("1")) {
mSweep2sleep.setChecked(true);
mSweep2sleep.setValue("1");
}else if(s2wsState.equals("0")) {
mSweep2sleep.setChecked(false);
mSweep2sleep.setValue("0");
}
}
if(!new File(FCHARGE_FILE).exists()) {
mKernelCategory.removePreference(mKernelFcharge);
} else {
String fchargeState = Helpers.getFileContent(new File(FCHARGE_FILE));
if(fchargeState.equals("0")) {
mKernelFcharge.setChecked(false);
mKernelFcharge.setValue("0");
} else if(fchargeState.equals("1")) {
mKernelFcharge.setChecked(true);
mKernelFcharge.setValue("1");
}
}
if(!new File(INTELLIPLUG_FILE).exists()) {
mKernelCategory.removePreference(mIntelliPlug);
} else {
String fchargeState = Helpers.getFileContent(new File(INTELLIPLUG_FILE));
if(fchargeState.equals("0")) {
mIntelliPlug.setChecked(false);
mIntelliPlug.setValue("0");
} else if(fchargeState.equals("1")) {
mIntelliPlug.setChecked(true);
mIntelliPlug.setValue("1");
}
}
if(!new File(ECOMODE_FILE).exists()) {
mKernelCategory.removePreference(mEcoMode);
} else {
String fchargeState = Helpers.getFileContent(new File(ECOMODE_FILE));
if(fchargeState.equals("0")) {
mEcoMode.setChecked(false);
mEcoMode.setValue("0");
} else if(fchargeState.equals("1")) {
mEcoMode.setChecked(true);
mEcoMode.setValue("1");
}
}
if(mKernelCategory.getPreferenceCount() == 0) {
mRootScreen.removePreference(mKernelCategory);
}
File f = new File(HEADSET_BOOST_FILE);
File f1 = new File(MIC_BOOST_FILE);
File f2 = new File(SPEAKER_BOOST_FILE);
File f3 = new File(VOLUME_BOOST_FILE);
File f4 = new File(TEMP_FILE);
if(f.exists())
createPreference(mSoundCategory,f, color, true);
if(f1.exists())
createPreference(mSoundCategory,f1, color, true);
if(f2.exists())
createPreference(mSoundCategory,f2, color, true);
if(f3.exists())
createPreference(mSoundCategory,f3, color, true);
if(f4.exists()) {
createPreference(mKernelCategory,f4, color, true);
}
if(new File(VIBRATION_FILE).exists()){
mVibration.setSummary(Helpers.getFileContent(new File(VIBRATION_FILE)));
}else {
mKernelCategory.removePreference(mVibration);
}
/*
if(new File(FAUXSOUND_FILE).exists()) {
File[] files = new File(FAUXSOUND_FILE).listFiles();
Arrays.sort(files);
for(File file: files) {
if(!file.getName().contains("version")) {
createPreference(mSoundCategory,file, color, false);
}
}
}
*/
if(mSoundCategory.getPreferenceCount() == 1) {
mRootScreen.removePreference(mSoundCategory);
}
if(RootTools.isBusyboxAvailable()) {
String[] availTCP = Helpers.readCommandStrdOut(TCP_OPTIONS, false).replaceAll("net.ipv4.tcp_available_congestion_control = ", "").replaceAll("\n", "").split(" ");
CustomListPreference pref = new CustomListPreference(mContext, category);
pref.setTitle("TCP Congestion control");
pref.setTitleColor(color);
pref.setEntries(availTCP);
pref.setEntryValues(availTCP);
pref.setSummary(Helpers.readCommandStrdOut(TCP_CURRENT, false).replaceAll("net.ipv4.tcp_congestion_control = ","").replaceAll("\n", ""));
String key = "sysctl -w net.ipv4.tcp_congestion_control=" +pref.getSummary();
pref.setKey(key);
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference pref, Object newValue) {
// TODO Auto-generated method stub
String value = (String) newValue;
String command = "sysctl -w net.ipv4.tcp_congestion_control=" +value;
pref.setKey(command);
pref.setSummary(value);
CMDProcessor.runSuCommand(command);
return true;
}
});
mSchedCategory.addPreference(pref);
}
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View v = inflater.inflate(R.layout.layout_list, container,false);
return v;
}
@Override
public boolean onPreferenceChange(Preference pref, Object newValue) {
// TODO Auto-generated method stub
if(pref == mCpuScheduler) {
String value = (String) newValue;
mCpuScheduler.setSummary(value);
mCpuScheduler.setValue(value);
CMDProcessor.runSuCommand("echo "+value+" > "+SCHEDULER_FILE);
updateDb(pref, value, ((CustomListPreference) pref).isBootChecked());
}
if(pref == mCpuReadAhead) {
String value = (String) newValue;
mCpuReadAhead.setSummary(value);
mCpuReadAhead.setValue(value);
CMDProcessor.runSuCommand("echo "+value+" > "+READ_AHEAD_FILE);
updateDb(pref, value, ((CustomListPreference) pref).isBootChecked());
}
return true;
}
@Override
public boolean onPreferenceClick(final Preference pref) {
// TODO Auto-generated method stub
if(pref == mAdvancedScheduler) {
Fragment f = new CpuSchedulerPreferenceFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
// This adds the newly created Preference fragment to my main layout, shown below
ft.replace(R.id.activity_container,f);
// By hiding the main fragment, transparency isn't an issue
ft.addToBackStack("TAG");
ft.commit();
}
if(pref == mVibration) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
LayoutInflater inflater = getActivity().getLayoutInflater();
View v = inflater.inflate(R.layout.dialog_layout, null, false);
final EditText et = (EditText) v.findViewById(R.id.et);
String val = pref.getSummary().toString();
et.setText(val);
et.setRawInputType(InputType.TYPE_CLASS_NUMBER);
et.setGravity(Gravity.CENTER_HORIZONTAL);
List<DataItem> items = db.getAllItems();
builder.setView(v);
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String value = et.getText().toString();
pref.setSummary(value);
CMDProcessor.runSuCommand("echo \""+value+"\" > "+pref.getKey());
updateDb(pref, value, ((CustomPreference) pref).isBootChecked());
}
} );
AlertDialog dialog = builder.create();
dialog.show();
dialog.getWindow().getAttributes().windowAnimations = R.style.dialog_animation;
Window window = dialog.getWindow();
window.setLayout(800, LayoutParams.WRAP_CONTENT);
}
return false;
}
private void createPreference(PreferenceCategory mCategory, File file, String color,final boolean numbers) {
String fileName = file.getName();
String filePath = file.getAbsolutePath();
final String fileContent = Helpers.getFileContent(file);
final CustomPreference pref = new CustomPreference(mContext, false, category);
pref.setTitle(fileName);
pref.setTitleColor(color);
pref.setSummary(fileContent);
pref.setKey(filePath);
Log.d("CONTENT", fileContent);
mCategory.addPreference(pref);
pref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
@Override
public boolean onPreferenceClick(final Preference p) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
LayoutInflater inflater = getActivity().getLayoutInflater();
View v = inflater.inflate(R.layout.dialog_layout, null, false);
final EditText et = (EditText) v.findViewById(R.id.et);
String val = p.getSummary().toString();
et.setText(val);
if(numbers) {
et.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
et.setGravity(Gravity.CENTER_HORIZONTAL);
List<DataItem> items = db.getAllItems();
builder.setView(v);
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String value = et.getText().toString();
p.setSummary(value);
Log.d("TEST", "echo \""+value+"\" > "+ p.getKey());
CMDProcessor.runSuCommand("echo \""+value+"\" > "+p.getKey());
updateDb(p, value, pref.isBootChecked());
}
} );
AlertDialog dialog = builder.create();
dialog.show();
dialog.getWindow().getAttributes().windowAnimations = R.style.dialog_animation;
Window window = dialog.getWindow();
window.setLayout(800, LayoutParams.WRAP_CONTENT);
return true;
}
});
}
private void updateDb(final Preference p, final String value,final boolean isChecked) {
class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
if(isChecked) {
List<DataItem> items = db.getAllItems();
for(DataItem item : items) {
if(item.getName().equals("'"+p.getKey()+"'")) {
db.deleteItemByName("'"+p.getKey()+"'");
}
}
db.addItem(new DataItem("'"+p.getKey()+"'", value, p.getTitle().toString(), category));
} else {
if(db.getContactsCount() != 0) {
db.deleteItemByName("'"+p.getKey()+"'");
}
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
}
}
new LongOperation().execute();
}
}