package com.blackice.control.tools;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;
import com.blackice.control.R;
import com.blackice.control.util.CMDProcessor;
import com.blackice.control.util.Helpers;
public class InitD extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content,
new InitDPreferences()).commit();
}
class InitDPreferences extends PreferenceFragment implements OnSharedPreferenceChangeListener {
File cfg;
private static final String TAG = "InitD";
private static final String KEY_ENABLE_INITD = "enable_init_d";
private static final String KEY_ZIPALIGN = "zipalign";
// private static final String KEY_ENABLE_SDBOOST = "enable_sd_boost";
// private static final String KEY_SDBOOST = "sd_boost";
private static final String KEY_FIX_PERMS = "fix_permissions";
private static final String KEY_CLEAR_CACHE = "clear_cache";
private static final String KEY_ENABLE_SYSCTL = "enable_sysctl";
private static final String KEY_ENABLE_CRON = "enable_cron";
private static final String VAR_ZIPALIGN = "ZIPALIGN_AT_BOOT";
// private static final String VAR_ENABLE_SDBOOST = "SD_BOOST_AT_BOOT";
// private static final String VAR_SDBOOST = "READ_AHEAD_KB";
private static final String VAR_FIX_PERMS = "FIX_PERMISSIONS_AT_BOOT";
private static final String VAR_CLEAR_CACHE = "REMOVE_CACHE";
private static final String VAR_ENABLE_SYSCTL = "ENABLE_SYSCTL";
private static final String VAR_ENABLE_CRON = "ENABLE_CRON";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceManager.getDefaultSharedPreferences(getApplicationContext())
.registerOnSharedPreferenceChangeListener(this);
addPreferencesFromResource(R.xml.propmodder_initd);
cfg = new File("/system/etc/liberty.cfg");
CheckBoxPreference cb = (CheckBoxPreference) findPreference(KEY_ENABLE_INITD);
boolean checked = isTweakEnabled(KEY_ENABLE_INITD, null);
cb.setChecked(checked);
cb = (CheckBoxPreference) findPreference(KEY_ZIPALIGN);
checked = isTweakEnabled(KEY_ZIPALIGN, VAR_ZIPALIGN);
cb.setChecked(checked);
/* cb = (CheckBoxPreference) findPreference(KEY_ENABLE_SDBOOST);
checked = isTweakEnabled(KEY_ENABLE_SDBOOST, VAR_ENABLE_SDBOOST);
cb.setChecked(checked); */
cb = (CheckBoxPreference) findPreference(KEY_FIX_PERMS);
checked = isTweakEnabled(KEY_FIX_PERMS, VAR_FIX_PERMS);
cb.setChecked(checked);
/* cb = (CheckBoxPreference) findPreference(KEY_ENABLE_SDBOOST);
checked = isTweakEnabled(KEY_ENABLE_SDBOOST, VAR_ENABLE_SDBOOST);
cb.setChecked(checked); */
cb = (CheckBoxPreference) findPreference(KEY_CLEAR_CACHE);
checked = isTweakEnabled(KEY_CLEAR_CACHE, VAR_CLEAR_CACHE);
cb.setChecked(checked);
cb = (CheckBoxPreference) findPreference(KEY_ENABLE_SYSCTL);
checked = isTweakEnabled(KEY_ENABLE_SYSCTL, VAR_ENABLE_SYSCTL);
cb.setChecked(checked);
cb = (CheckBoxPreference) findPreference(KEY_ENABLE_CRON);
checked = isTweakEnabled(KEY_ENABLE_CRON, VAR_ENABLE_CRON);
cb.setChecked(checked);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals(KEY_ENABLE_INITD)) {
final boolean initDEnabled = sharedPreferences.getBoolean(KEY_ENABLE_INITD, true);
Helpers.getMount("rw");
if (initDEnabled && !new File("/system/etc/init_trigger.enabled").exists()) {
new CMDProcessor().su
.runWaitFor("busybox mv /system/etc/init_trigger.disabled /system/etc/init_trigger.enabled");
} else if (!initDEnabled && !new File("/system/etc/init_trigger.disabled").exists()) {
new CMDProcessor().su
.runWaitFor("busybox mv /system/etc/init_trigger.enabled /system/etc/init_trigger.disabled");
}
Helpers.getMount("ro");
} else if (key.equals(KEY_ZIPALIGN)) {
final boolean zipalign = sharedPreferences.getBoolean(KEY_ZIPALIGN, true);
final String value = zipalign ? "1" : "0";
Helpers.getMount("rw");
new CMDProcessor().su.runWaitFor("busybox sed -i 's|" + VAR_ZIPALIGN + "=.*|"
+ VAR_ZIPALIGN + "=" + value + "|' " + cfg);
Helpers.getMount("ro");
/*} else if (key.equals(KEY_ENABLE_SDBOOST)) {
final boolean enable_boost = sharedPreferences.getBoolean(KEY_ENABLE_SDBOOST, true);
final String value = enable_boost ? "1" : "0";
Helpers.getMount("rw");
new CMDProcessor().su.runWaitFor("busybox sed -i 's|" + VAR_ENABLE_SDBOOST + "=.*|"
+ VAR_ENABLE_SDBOOST + "=" + value + "|' " + cfg);
Helpers.getMount("ro");
} else if (key.equals(KEY_SDBOOST)) {
final String value = sharedPreferences.getString(KEY_SDBOOST, "2048");
Helpers.getMount("rw");
new CMDProcessor().su.runWaitFor("busybox sed -i 's|" + VAR_SDBOOST + "=.*|"
+ VAR_SDBOOST + "=" + value + "|' " + cfg);
Helpers.getMount("ro"); */
} else if (key.equals(KEY_FIX_PERMS)) {
final boolean fix_perms = sharedPreferences.getBoolean(KEY_FIX_PERMS, true);
final String value = fix_perms ? "1" : "0";
Helpers.getMount("rw");
new CMDProcessor().su.runWaitFor("busybox sed -i 's|" + VAR_FIX_PERMS + "=.*|"
+ VAR_FIX_PERMS + "=" + value + "|' " + cfg);
Helpers.getMount("ro");
} else if (key.equals(KEY_CLEAR_CACHE)) {
final boolean clear_cache = sharedPreferences.getBoolean(KEY_CLEAR_CACHE, true);
final String value = clear_cache ? "1" : "0";
Helpers.getMount("rw");
new CMDProcessor().su.runWaitFor("busybox sed -i 's|" + VAR_CLEAR_CACHE + "=.*|"
+ VAR_CLEAR_CACHE + "=" + value + "|' " + cfg);
Helpers.getMount("ro");
} else if (key.equals(KEY_ENABLE_SYSCTL)) {
final boolean enable_sysctl = sharedPreferences.getBoolean(KEY_ENABLE_SYSCTL, true);
final String value = enable_sysctl ? "1" : "0";
Helpers.getMount("rw");
new CMDProcessor().su.runWaitFor("busybox sed -i 's|" + VAR_ENABLE_SYSCTL + "=.*|"
+ VAR_ENABLE_SYSCTL + "=" + value + "|' " + cfg);
Helpers.getMount("ro");
} else if (key.equals(KEY_ENABLE_CRON)) {
final boolean enable_cron = sharedPreferences.getBoolean(KEY_ENABLE_CRON, true);
final String value = enable_cron ? "1" : "0";
Helpers.getMount("rw");
new CMDProcessor().su.runWaitFor("busybox sed -i 's|" + VAR_ENABLE_CRON + "=.*|"
+ VAR_ENABLE_CRON + "=" + value + "|' " + cfg);
Helpers.getMount("ro");
}
}
private String getVariableValue(final String variable) {
String value = null;
try {
BufferedReader br = new BufferedReader(new FileReader(cfg), 256);
String line = null;
while ((line = br.readLine()) != null) {
if (line.startsWith(variable)) {
value = line.substring(line.lastIndexOf("=") + 1);
break;
}
}
br.close();
} catch (FileNotFoundException e) {
Log.d(TAG, cfg + " does not exist");
return null;
} catch (IOException e) {
Log.d(TAG, "Error reading " + cfg);
}
if (value == null) {
final String s = new CMDProcessor().su.runWaitFor("busybox grep " + variable + " "
+ cfg).stdout;
if (s != null) {
value = s.substring(s.lastIndexOf("=") + 1);
}
}
return value;
}
private boolean isTweakEnabled(final String key, final String variable) {
if (key.equals(KEY_ENABLE_INITD)) {
return new File("/system/etc/init_trigger.enabled").exists();
} else {
String value = getVariableValue(variable);
if (value == null) {
return false;
}
return (value.equals("1"));
}
}
}
}