/** Copyright (C) 2013 Louis Teboul (a.k.a Androguide)
*
* admin@pimpmyrom.org || louisteboul@gmail.com
* http://pimpmyrom.org || http://androguide.fr
* 71 quai Clémenceau, 69300 Caluire-et-Cuire, FRANCE.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
**/
package com.androguide.honamicontrol.kernel.iotweaks;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.CompoundButton;
import com.androguide.honamicontrol.R;
import com.androguide.honamicontrol.cards.CardSeekBarGeneric;
import com.androguide.honamicontrol.cards.CardSpinner;
import com.androguide.honamicontrol.cards.CardSwitchDisabled;
import com.androguide.honamicontrol.cards.CardSwitchPlugin;
import com.androguide.honamicontrol.helpers.CPUHelper;
import com.androguide.honamicontrol.helpers.Helpers;
import com.fima.cardsui.objects.CardStack;
import com.fima.cardsui.views.CardUI;
import java.util.ArrayList;
import java.util.Arrays;
public class IOTweaksActivity extends ActionBarActivity implements IOTweaksInterface {
int schedCounter = 0, schedCounter1 = 0, readaheadCounter = 0, readaheadCounter1 = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setIcon(getResources().getDrawable(R.drawable.ic_tools_io_tweaks));
setContentView(R.layout.cardsui);
final SharedPreferences bootPrefs = getSharedPreferences("BOOT_PREFS", 0);
CardUI cardsUI = (CardUI) findViewById(R.id.cardsui);
cardsUI.addStack(new CardStack(""));
cardsUI.addStack(new CardStack(""));
if (Helpers.doesFileExist(DYNAMIC_FSYNC_TOGGLE)) {
cardsUI.addCard(new CardSwitchPlugin(
getString(R.string.dynamic_fsync),
getString(R.string.dynamic_fsync_desc) +
getString(R.string.dynamic_fsync_version) + CPUHelper.readOneLine(DYNAMIC_FSYNC_VERSION) + "\'",
"#1abc9c",
DYNAMIC_FSYNC_TOGGLE,
this,
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isOn) {
bootPrefs.edit().putBoolean("DYNAMIC_FSYNC", isOn).commit();
if (isOn)
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo 1 > " + DYNAMIC_FSYNC_TOGGLE);
else
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo 0 > " + DYNAMIC_FSYNC_TOGGLE);
}
}
));
} else {
cardsUI.addCard(new CardSwitchDisabled(
getString(R.string.dynamic_fsync),
getString(R.string.dyn_fsync_unsupported),
"#c74b46",
"",
this,
null)
);
}
if (Helpers.doesFileExist(IO_SCHEDULER)) {
final ArrayList<String> ioScheds = CPUHelper.getAvailableIOSchedulers();
cardsUI.addCard(new CardSpinner(getString(R.string.io_sched_emmc),
getString(R.string.io_sched_emmc_desc),
"#1abc9c",
IO_SCHEDULER,
ioScheds.indexOf(CPUHelper.getIOScheduler()),
ioScheds,
this,
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (schedCounter > 0) {
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo " + ioScheds.get(position) + " > " + IO_SCHEDULER);
bootPrefs.edit().putString("IO_SCHEDULER", ioScheds.get(position)).commit();
}
schedCounter++;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
));
}
if (Helpers.doesFileExist(IO_SCHEDULER_SD)) {
final ArrayList<String> ioScheds = CPUHelper.getAvailableIOSchedulersSD();
cardsUI.addCard(new CardSpinner(getString(R.string.io_sched_sd),
getString(R.string.io_sched_sd_desc),
"#1abc9c",
IO_SCHEDULER_SD,
ioScheds.indexOf(CPUHelper.getIOSchedulerSD()),
ioScheds,
this,
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (schedCounter1 > 0) {
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo " + ioScheds.get(position) + " > " + IO_SCHEDULER_SD);
bootPrefs.edit().putString("IO_SCHEDULER_SD", ioScheds.get(position)).commit();
}
schedCounter1++;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
));
}
if (Helpers.doesFileExist(EMMC_READAHEAD)) {
final ArrayList<String> steps = new ArrayList<String>();
steps.add("128");
steps.add("256");
steps.add("384");
steps.add("512");
steps.add("768");
steps.add("1024");
steps.add("1280");
steps.add("1536");
steps.add("1792");
steps.add("2048");
steps.add("3072");
steps.add("4096");
String currStep = CPUHelper.readOneLineNotRoot(EMMC_READAHEAD);
int currIndex = steps.indexOf(currStep);
cardsUI.addCard(new CardSpinner(getString(R.string.emmc_readahead),
getString(R.string.emmc_readahead_desc),
"#1abc9c",
EMMC_READAHEAD,
currIndex,
steps,
this,
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (readaheadCounter > 0) {
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo " + steps.get(position) + " > " + EMMC_READAHEAD);
bootPrefs.edit().putString("EMMC_READAHEAD", steps.get(position)).commit();
}
readaheadCounter++;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
));
}
if (Helpers.doesFileExist(SD_READAHEAD)) {
final ArrayList<String> steps = new ArrayList<String>();
steps.add("128");
steps.add("256");
steps.add("384");
steps.add("512");
steps.add("768");
steps.add("1024");
steps.add("1280");
steps.add("1536");
steps.add("1792");
steps.add("2048");
steps.add("3072");
steps.add("4096");
String currStep = CPUHelper.readOneLineNotRoot(SD_READAHEAD);
int currIndex = steps.indexOf(currStep);
cardsUI.addCard(new CardSpinner(getString(R.string.sdcard_readahead),
getString(R.string.sdcard_readahead_desc),
"#1abc9c",
SD_READAHEAD,
currIndex,
steps,
this,
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (readaheadCounter1 > 0) {
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo " + steps.get(position) + " > " + SD_READAHEAD);
bootPrefs.edit().putString("SD_READAHEAD", steps.get(position)).commit();
}
readaheadCounter1++;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
));
}
if (Helpers.doesFileExist(EMMC_ENTROPY_CONTRIB)) {
cardsUI.addCard(new CardSwitchPlugin(
getString(R.string.emmc_entropy_contrib),
getString(R.string.entropy_contrib_desc),
"#1abc9c",
EMMC_ENTROPY_CONTRIB,
this,
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isOn) {
if (isOn)
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo 1 > " + EMMC_ENTROPY_CONTRIB);
else
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo 0 > " + EMMC_ENTROPY_CONTRIB);
bootPrefs.edit().putBoolean("EMMC_ENTROPY_CONTRIB", isOn).commit();
}
}
));
}
if (Helpers.doesFileExist(SD_ENTROPY_CONTRIB)) {
cardsUI.addCard(new CardSwitchPlugin(
getString(R.string.sdcard_entropy_contrib),
getString(R.string.entropy_contrib_desc),
"#1abc9c",
SD_ENTROPY_CONTRIB,
this,
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isOn) {
if (isOn)
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo 1 > " + SD_ENTROPY_CONTRIB);
else
Helpers.CMDProcessorWrapper.runSuCommand("busybox echo 0 > " + SD_ENTROPY_CONTRIB);
bootPrefs.edit().putBoolean("SD_ENTROPY_CONTRIB", isOn).commit();
}
}
));
}
cardsUI.refresh();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
}
return super.onOptionsItemSelected(item);
}
}