diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c6e84a8fb..1c4312ddd 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -202,6 +202,18 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 6add58bb2..354ac9a42 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -89,12 +89,20 @@
180 μοίρες
270 μοίρες
+
+ Ενισχυμένη φωτεινότητα οθόνης
+ Ανεβάζει το επίπεδο φωτεινότητας της οθόνης (μπορεί να προκαλέσει αυξημένη κατανάλωση μπαταρίας)
+
Tweaks μπάρας κατάστασης
Στυλ AM/PM
Προβολή AM/PM δίπλα στο ρολόι
Εμφάνιση ρολογιού
Το ρολόι της μπάρας κατάστασης θα είναι κρυμμένο, αν το απενεργοποιήσετε
+ Κεντραρισμένο ρολόι
+ Το ρολόι θα είναι είναι κεντραρισμένο αν το ενεργοποιήσετε. Απενεργοποιήστε το για να μετακινηθεί στα δεξιά.
+ Χρώμα ρολογιού
+ ffffffff
Στυλ ένδειξης μπαταρίας
Επιλογές εμφάνισης ένδειξης μπαταρίας
Συμπαγής ετικέτα παρόχου
@@ -259,6 +267,8 @@
Συνεχής εμφ. μπαταρίας
Συνεχής εμφάνιση επιπέδου μπαταρίας στην οθόνη κλειδώματος
+ Φακός στην οθόνη κλειδώματος
+ Παρατεταμένη πιεση του πλήκτρου HOME στην οθόνη κλειδώματος αναβεί/σβήνει το Φλας
Διάταξη γραφ. στοιχείων
Διάταξη ρολογιού, ημερομηνίας, πάροχου, κατάστασης
Έλεγχος μουσικής
@@ -275,6 +285,8 @@
Το πάτημα του trackball ξυπνά τη συσκευή
Ενεργ. με ένταση
Το πάτημα των πλήκτρων έντασης ενεργοποιεί τη συσκευή. Προορίζεται για συσκευές με πρόβλημα στο πλήκτρο power
+ Το πλήκτρο Back τερματίζει την κλήση
+ Πιέζοντας το πλήκτρο Back τερματίζει την τρέχουσα κλήση
Ξεκλείδωμα με trackball
Το πάτημα του trackball ξεκλειδώνει τη συσκευή
Ξεκλείδωμα με συρτάρι πληκτρολ.
@@ -759,7 +771,11 @@
Μέγιστη συχνότητα CPU\nΤρέχουσα: %s
Ορισμός κατά την εκκίνηση
Επαναφορά ρυθμίσεων CPU κατά την εκκίνηση
-
+ Undervolt
+ Μείωση τάσης στον επεξεργαστή (μειώνει την κατανάλωση μπαταρίας αλλά ίσως προκαλέσει αστάθεια)
+ Overclock
+ Αύξηση συχνότητας ρολογιού του επεξεργαστή (βελτιώνει τις επιδόσεις αλλά ίσως προκαλέσει αστάθεια)
+
Διαχείριση δικαιωμάτων
Ενεργοποίηση διαχείρισης δικαιωμάτων εφαρμογών
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 392873ec9..b5c622729 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -50,8 +50,19 @@
- 16m
- 24m
- 32m
+ - 36m
+ - 40m
+ - 44m
- 48m
+
+
+ - 128KB
+ - 1024KB
+ - 2048KB
+ - 3072KB
+ - 4096KB
+
- Automatic
@@ -94,6 +105,7 @@
- Icon (Default)
- Percentage
+ - Status Bar
- Hidden
@@ -101,6 +113,7 @@
- 0
- 1
- 2
+ - 3
diff --git a/res/values/config.xml b/res/values/config.xml
index 29a262f5b..630fa6001 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -32,4 +32,8 @@
false
false
+
+
+ x10miniuv.ko
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fcf51bb0d..38d5b7782 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -30,7 +30,7 @@
System changelog, stats, update notifications
- Update notifications
+ Lx Update notifications
Get push notifications of updates
@@ -92,12 +92,20 @@
180 degrees
270 degrees
+
+ Ultra brightness
+ Increases the brightness level (may increase battery consumption)
+
Status bar tweaks
AM/PM style
Display style of AM/PM next to clock
Show clock
Status bar clock will be hidden, if disabled
+ Center clock
+ Clock will be centered if checked. Uncheck to move to the right.
+ Clock color
+ ffffffff
Battery status style
Display style of battery status
Compact carrier label
@@ -270,6 +278,8 @@
Always display battery status
Display battery status on the lockscreen at all times
+ Lockscreen flashlight
+ Long pressing HOME button on the lockscreen toggles the flashlight
Widget layout
Toggle clock, date, carrier, status layout
Default
@@ -290,6 +300,10 @@
Pressing the trackball wakes the device
Volume rocker wake
Pressing the volume up/down wakes the device. Intended for devices with hard to press power key
+ Back button ends call
+ Pressing the back button ends the current call
+ Loop ringtone
+ Play ringtone continuously
Trackball unlock
Pressing the trackball unlocks the device
Sliding keyboard unlock
@@ -483,6 +497,10 @@
VM heap size
Maximum amount of memory per VM heap (requires reboot)
+
+ SD Card Cache size
+ Amount of Cache memory for SD Card reads (requires reboot)
+
Disable boot animation
Don\'t show the boot animation for faster boot
@@ -815,7 +833,22 @@
Maximum CPU frequency\nCurrently: %s
Set on boot
Restore CPU settings on boot
-
+ Undervolt
+ Underolt the CPU (improves battery life but may cause instability)
+ Overclock
+ Overclock the CPU (improves performance but may cause instability. Removing requires reboot)
+
+
+ A2SD (ext) settings
+ A2SD (ext) settings
+ App to SD card (ext) settings
+ List of A2SD modes\nCurrently installed: %S
+ Available modes (requires reboot)
+ A2SD Information
+ A2SD Information
+ Loading A2SD information\u2026
+ Error loading A2SD information\u2026
+
Permission management
Enable application permissions management
diff --git a/res/xml/a2sd_settings.xml b/res/xml/a2sd_settings.xml
new file mode 100644
index 000000000..3dcb3c5e8
--- /dev/null
+++ b/res/xml/a2sd_settings.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/cpu_settings.xml b/res/xml/cpu_settings.xml
index 482b1f26d..f02dbf7d3 100644
--- a/res/xml/cpu_settings.xml
+++ b/res/xml/cpu_settings.xml
@@ -10,7 +10,10 @@
+
+
-
+
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index 88bba8ce2..677aec9b4 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -13,6 +13,11 @@
android:targetClass="com.cyanogenmod.cmparts.activities.BacklightActivity" />
+
+
+
diff --git a/res/xml/input_settings.xml b/res/xml/input_settings.xml
index fbd937499..0fc8dd9f5 100644
--- a/res/xml/input_settings.xml
+++ b/res/xml/input_settings.xml
@@ -58,6 +58,10 @@
android:title="@string/pref_volbtn_music_controls_title"
android:summary="@string/pref_volbtn_music_controls_summary" />
+
+
diff --git a/res/xml/lockscreen_widgets_settings.xml b/res/xml/lockscreen_widgets_settings.xml
index 75559731f..91622d43e 100644
--- a/res/xml/lockscreen_widgets_settings.xml
+++ b/res/xml/lockscreen_widgets_settings.xml
@@ -13,6 +13,10 @@
+
+
+
+
+
+
+
+
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index abc3880d8..a8edc8f85 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -30,6 +30,10 @@
android:summary="@string/sound_lock_volume_keys_summary"
android:persistent="false" />
+
+
+
-
\ No newline at end of file
+
diff --git a/res/xml/ui_status_bar.xml b/res/xml/ui_status_bar.xml
index a867cd675..b3db8bb1a 100644
--- a/res/xml/ui_status_bar.xml
+++ b/res/xml/ui_status_bar.xml
@@ -7,6 +7,13 @@
android:title="@string/ui_status_bar_clock_title"
android:summary="@string/ui_status_bar_clock_summary"
android:defaultValue="true" />
+
+
+ android:entryValues="@array/values_status_bar_battery"
+ android:persistent="false" />
= 0) {
+ data.append(tmp, 0, numRead);
+ }
+ } catch (IOException e) {
+ showErrorAndFinish();
+ return;
+ } finally {
+ try {
+ if (inputReader != null) {
+ inputReader.close();
+ }
+ } catch (IOException e) {
+ }
+ }
+
+ if (TextUtils.isEmpty(data)) {
+ showErrorAndFinish();
+ return;
+ }
+
+ WebView webView = new WebView(this);
+
+ // Begin the loading. This will be done in a separate thread in WebView.
+ webView.loadDataWithBaseURL(null, data.toString(), "text/plain", "utf-8", null);
+ webView.setWebViewClient(new WebViewClient() {
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ // Change from 'Loading...' to the real title
+ mAlert.setTitle(getString(R.string.a2sd_dialog));
+ }
+ });
+
+ final AlertController.AlertParams p = mAlertParams;
+ p.mTitle = getString(R.string.a2sd_loading);
+ p.mView = webView;
+ p.mForceInverseBackground = true;
+ setupAlert();
+ }
+
+ private void showErrorAndFinish() {
+ Toast.makeText(this, R.string.a2sd_error, Toast.LENGTH_LONG)
+ .show();
+ finish();
+ }
+
+ public static int runA2sd(int mode) {
+ String command = "";
+ if (mode == 0)
+ command = "a2sd partlist > /data/app2sdinfo.log";
+ else if (mode == 1) //a2sd
+ command = "a2sd diskspace >> /data/app2sdinfo.log";
+ if (!command.equals("")) {
+ try {
+ Process process = Runtime.getRuntime().exec("su");
+ DataOutputStream outputStream = new DataOutputStream(process.getOutputStream());
+ DataInputStream inputStream = new DataInputStream(process.getInputStream());
+ outputStream.writeBytes(command + "\n");
+ outputStream.flush();
+ outputStream.writeBytes("exit\n");
+ outputStream.flush();
+ process.waitFor();
+ }
+ catch (IOException e) {
+ return -1;
+ }
+ catch (InterruptedException e) {
+ return -2;
+ }
+ return 0;
+ }
+ return -3;
+ }
+
+}
+
diff --git a/src/com/cyanogenmod/cmparts/activities/CPUActivity.java b/src/com/cyanogenmod/cmparts/activities/CPUActivity.java
index 8a00996a2..ef73a7d33 100644
--- a/src/com/cyanogenmod/cmparts/activities/CPUActivity.java
+++ b/src/com/cyanogenmod/cmparts/activities/CPUActivity.java
@@ -24,11 +24,14 @@
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
-
+import android.preference.CheckBoxPreference;
+import android.os.SystemProperties;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.DataOutputStream;
+import java.io.DataInputStream;
//
// CPU Related Settings
@@ -42,6 +45,7 @@ public class CPUActivity extends PreferenceActivity implements
public static final String MIN_FREQ_PREF = "pref_freq_min";
public static final String MAX_FREQ_PREF = "pref_freq_max";
public static final String FREQ_LIST_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies";
+ public static final String FREQ_LIST_FILE2 = "/data/local/tmp/available_frequencies";
public static final String FREQ_MAX_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq";
public static final String FREQ_MIN_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq";
public static final String SOB_PREF = "pref_set_on_boot";
@@ -55,7 +59,14 @@ public class CPUActivity extends PreferenceActivity implements
private ListPreference mGovernorPref;
private ListPreference mMinFrequencyPref;
private ListPreference mMaxFrequencyPref;
-
+
+ private static String UV_MODULE;
+ private static final String UNDERVOLT = "pref_undervolt";
+ private static final String UNDERVOLT_PROP = "sys.undervolt";
+ private static final String UNDERVOLT_PERSIST_PROP = "persist.sys.undervolt";
+ private static final int UNDERVOLT_DEFAULT = 0;
+ private CheckBoxPreference mUndervoltPref;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -67,6 +78,7 @@ protected void onCreate(Bundle savedInstanceState) {
String[] availableGovernors = readOneLine(GOVERNORS_LIST_FILE).split(" ");
String[] availableFrequencies = new String[0];
String availableFrequenciesLine = readOneLine(FREQ_LIST_FILE);
+ Log.e(TAG, "I read:: " + availableFrequenciesLine);
if (availableFrequenciesLine != null)
availableFrequencies = availableFrequenciesLine.split(" ");
String[] frequencies;
@@ -113,6 +125,16 @@ protected void onCreate(Bundle savedInstanceState) {
mMaxFrequencyPref.setValue(temp);
mMaxFrequencyPref.setSummary(String.format(mMaxFrequencyFormat, toMHz(temp)));
mMaxFrequencyPref.setOnPreferenceChangeListener(this);
+
+
+ /* Undervolting */
+ mUndervoltPref = (CheckBoxPreference) PrefScreen.findPreference(UNDERVOLT);
+ mUndervoltPref.setOnPreferenceChangeListener(this);
+ if (SystemProperties.getInt(UNDERVOLT_PERSIST_PROP, UNDERVOLT_DEFAULT) == 0)
+ mUndervoltPref.setChecked(false);
+ else
+ mUndervoltPref.setChecked(true);
+
}
@Override
@@ -135,8 +157,23 @@ public void onResume() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
String fname = "";
-
+ boolean value;
if (newValue != null) {
+ if (preference == mUndervoltPref) {
+ UV_MODULE = getResources().getString(R.string.undervolting_module);
+ value = mUndervoltPref.isChecked();
+ if (value==true) {
+ SystemProperties.set(UNDERVOLT_PERSIST_PROP, "0");
+ //remove the undervolting module
+ insmod(UV_MODULE, false);
+ }
+ else {
+ SystemProperties.set(UNDERVOLT_PERSIST_PROP, "1");
+ //insmod the undervolting module
+ insmod(UV_MODULE, true);
+ }
+ return true;
+ }
if (preference == mGovernorPref) {
fname = GOVERNOR;
} else if (preference == mMinFrequencyPref) {
@@ -159,6 +196,7 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
} else {
return false;
}
+
}
return false;
}
@@ -176,6 +214,10 @@ public static String readOneLine(String fname) {
}
} catch (Exception e) {
Log.e(TAG, "IO Exception when reading /sys/ file", e);
+ if ( fname.endsWith("scaling_available_frequencies") ) {
+ Log.e(TAG, "Using " + FREQ_LIST_FILE2 + " instead");
+ return readOneLine(FREQ_LIST_FILE2);
+ }
}
return line;
}
@@ -199,4 +241,35 @@ public static boolean writeOneLine(String fname, String value) {
private String toMHz(String mhzString) {
return new StringBuilder().append(Integer.valueOf(mhzString) / 1000).append(" MHz").toString();
}
+
+ private static boolean insmod(String module, boolean insert) {
+ String command;
+ if (insert)
+ command = "/system/bin/insmod /system/lib/modules/" + module;
+ else
+ command = "/system/bin/rmmod " + module;
+ try
+ {
+ Process process = Runtime.getRuntime().exec("su");
+ Log.e(TAG, "Executing: " + command);
+ DataOutputStream outputStream = new DataOutputStream(process.getOutputStream());
+ DataInputStream inputStream = new DataInputStream(process.getInputStream());
+ outputStream.writeBytes(command + "\n");
+ outputStream.flush();
+ outputStream.writeBytes("exit\n");
+ outputStream.flush();
+ process.waitFor();
+ }
+ catch (IOException e)
+ {
+ return false;
+ }
+ catch (InterruptedException e)
+ {
+ return false;
+ }
+ return true;
+ }
+
}
+
diff --git a/src/com/cyanogenmod/cmparts/activities/DisplayActivity.java b/src/com/cyanogenmod/cmparts/activities/DisplayActivity.java
index e675181b6..5a8a3f094 100644
--- a/src/com/cyanogenmod/cmparts/activities/DisplayActivity.java
+++ b/src/com/cyanogenmod/cmparts/activities/DisplayActivity.java
@@ -32,6 +32,12 @@
import android.provider.Settings;
import android.os.SystemProperties;
+import android.os.SystemProperties;
+import android.util.Log;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
public class DisplayActivity extends PreferenceActivity implements OnPreferenceChangeListener {
/* Preference Screens */
@@ -54,6 +60,18 @@ public class DisplayActivity extends PreferenceActivity implements OnPreferenceC
private static final String ROTATION_90_PREF = "pref_rotation_90";
private static final String ROTATION_180_PREF = "pref_rotation_180";
private static final String ROTATION_270_PREF = "pref_rotation_270";
+
+ private static final String ULTRA_BRIGHTNESS = "pref_ultra_brightness";
+
+ private static final String ULTRABRIGHTNESS_PROP = "sys.ultrabrightness";
+
+ private static final String ULTRABRIGHTNESS_PERSIST_PROP = "persist.sys.ultrabrightness";
+
+ private static final int ULTRABRIGHTNESS_DEFAULT = 0;
+
+ private static final String TAG = "DisplayActivitySettings";
+
+ private static final String ROTATE_180_PREF = "pref_rotate_180";
private static final int ROTATION_0_MODE = 8;
private static final int ROTATION_90_MODE = 1;
@@ -63,6 +81,8 @@ public class DisplayActivity extends PreferenceActivity implements OnPreferenceC
private CheckBoxPreference mElectronBeamAnimationOn;
private CheckBoxPreference mElectronBeamAnimationOff;
+
+ private CheckBoxPreference mUltraBrightnessPref;
private CheckBoxPreference mRotationAnimationPref;
@@ -118,12 +138,18 @@ public void onCreate(Bundle savedInstanceState) {
mRotation180Pref = (CheckBoxPreference) prefSet.findPreference(ROTATION_180_PREF);
mRotation270Pref = (CheckBoxPreference) prefSet.findPreference(ROTATION_270_PREF);
int mode = Settings.System.getInt(getContentResolver(),
- Settings.System.ACCELEROMETER_ROTATION_MODE,
- ROTATION_0_MODE|ROTATION_90_MODE|ROTATION_270_MODE);
- mRotation0Pref.setChecked((mode & ROTATION_0_MODE) != 0);
- mRotation90Pref.setChecked((mode & ROTATION_90_MODE) != 0);
- mRotation180Pref.setChecked((mode & ROTATION_180_MODE) != 0);
- mRotation270Pref.setChecked((mode & ROTATION_270_MODE) != 0);
+ Settings.System.ACCELEROMETER_ROTATION_MODE, 13);
+ mRotation0Pref.setChecked((mode & 8) != 0);
+ mRotation90Pref.setChecked((mode & 1) != 0);
+ mRotation180Pref.setChecked((mode & 2) != 0);
+ mRotation270Pref.setChecked((mode & 4) != 0);
+
+ /* Ultra brightness */
+ mUltraBrightnessPref = (CheckBoxPreference) prefSet.findPreference(ULTRA_BRIGHTNESS);
+ if (SystemProperties.getInt(ULTRABRIGHTNESS_PERSIST_PROP, ULTRABRIGHTNESS_DEFAULT) == 0)
+ mUltraBrightnessPref.setChecked(false);
+ else
+ mUltraBrightnessPref.setChecked(true);
}
/** Whether backlight settings are supported or not */
@@ -154,6 +180,18 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
Settings.System.putInt(getContentResolver(),
Settings.System.ELECTRON_BEAM_ANIMATION_OFF, value ? 1 : 0);
}
+
+ if (preference == mUltraBrightnessPref) {
+ value = mUltraBrightnessPref.isChecked();
+ if (value==true) {
+ SystemProperties.set(ULTRABRIGHTNESS_PERSIST_PROP, "1");
+ writeOneLine("/sys/devices/platform/i2c-adapter/i2c-0/0-0036/mode", "i2c_pwm");
+ }
+ else {
+ SystemProperties.set(ULTRABRIGHTNESS_PERSIST_PROP, "0");
+ writeOneLine("/sys/devices/platform/i2c-adapter/i2c-0/0-0036/mode", "i2c_pwm_als");
+ }
+ }
if (preference == mRotationAnimationPref) {
SystemProperties.set(ROTATION_ANIMATION_PROP,
@@ -171,7 +209,7 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
if (mRotation180Pref.isChecked()) mode |= ROTATION_180_MODE;
if (mRotation270Pref.isChecked()) mode |= ROTATION_270_MODE;
if (mode == 0) {
- mode |= ROTATION_0_MODE;
+ mode |= 8;
mRotation0Pref.setChecked(true);
}
Settings.System.putInt(getContentResolver(),
@@ -184,5 +222,21 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
public boolean onPreferenceChange(Preference preference, Object newValue) {
return false;
}
+
+ public static boolean writeOneLine(String fname, String value) {
+ try {
+ FileWriter fw = new FileWriter(fname);
+ try {
+ fw.write(value);
+ } finally {
+ fw.close();
+ }
+ } catch (IOException e) {
+ String Error = "Error writing to " + fname + ". Exception: ";
+ Log.e(TAG, Error, e);
+ return false;
+ }
+ return true;
+ }
}
diff --git a/src/com/cyanogenmod/cmparts/activities/InputActivity.java b/src/com/cyanogenmod/cmparts/activities/InputActivity.java
index 5d049e452..48eaba570 100644
--- a/src/com/cyanogenmod/cmparts/activities/InputActivity.java
+++ b/src/com/cyanogenmod/cmparts/activities/InputActivity.java
@@ -37,6 +37,8 @@ public class InputActivity extends PreferenceActivity implements ShortcutPickHel
private static final String TRACKBALL_WAKE_PREF = "pref_trackball_wake";
private static final String VOLUME_WAKE_PREF = "pref_volume_wake";
+
+ private static final String BACK_BUTTON_ENDS_CALL_PREF = "pref_back_button_ends_call";
private static final String VOLBTN_MUSIC_CTRL_PREF = "pref_volbtn_music_controls";
@@ -61,6 +63,8 @@ public class InputActivity extends PreferenceActivity implements ShortcutPickHel
private CheckBoxPreference mTrackballWakePref;
private CheckBoxPreference mVolumeWakePref;
+
+ private CheckBoxPreference mBackButtonEndsCall;
private CheckBoxPreference mVolBtnMusicCtrlPref;
@@ -100,6 +104,10 @@ public void onCreate(Bundle savedInstanceState) {
mVolumeWakePref = (CheckBoxPreference) prefSet.findPreference(VOLUME_WAKE_PREF);
mVolumeWakePref.setChecked(Settings.System.getInt(getContentResolver(),
Settings.System.VOLUME_WAKE_SCREEN, 0) == 1);
+
+ /* Back button ends call */
+ mBackButtonEndsCall = (CheckBoxPreference) prefSet.findPreference(BACK_BUTTON_ENDS_CALL_PREF);
+ mBackButtonEndsCall.setChecked(Settings.System.getInt(getContentResolver(), Settings.System.BACK_BUTTON_ENDS_CALL, 0) == 1);
/* Volume button music controls */
mVolBtnMusicCtrlPref = (CheckBoxPreference) prefSet.findPreference(VOLBTN_MUSIC_CTRL_PREF);
@@ -188,6 +196,9 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
Settings.System.putInt(getContentResolver(), Settings.System.VOLUME_WAKE_SCREEN,
value ? 1 : 0);
return true;
+ } else if (preference == mBackButtonEndsCall) {
+ Settings.System.putInt(getContentResolver(), Settings.System.BACK_BUTTON_ENDS_CALL, mBackButtonEndsCall.isChecked() ? 1 : 0);
+ return true;
} else if (preference == mVolBtnMusicCtrlPref) {
value = mVolBtnMusicCtrlPref.isChecked();
Settings.System.putInt(getContentResolver(), Settings.System.VOLBTN_MUSIC_CONTROLS,
diff --git a/src/com/cyanogenmod/cmparts/activities/LockscreenWidgetsActivity.java b/src/com/cyanogenmod/cmparts/activities/LockscreenWidgetsActivity.java
index 0b9e2a886..b38ae327d 100644
--- a/src/com/cyanogenmod/cmparts/activities/LockscreenWidgetsActivity.java
+++ b/src/com/cyanogenmod/cmparts/activities/LockscreenWidgetsActivity.java
@@ -44,6 +44,7 @@ public class LockscreenWidgetsActivity extends PreferenceActivity implements
private static final String LOCKSCREEN_MUSIC_CONTROLS_HEADSET = "pref_lockscreen_music_headset";
private static final String LOCKSCREEN_ALWAYS_MUSIC_CONTROLS = "lockscreen_always_music_controls";
private static final String LOCKSCREEN_ALWAYS_BATTERY = "lockscreen_always_battery";
+ private static final String LOCKSCREEN_FLASHLIGHT = "lockscreen_flashlight";
private static final String LOCKSCREEN_CALENDARS = "lockscreen_calendars";
private static final String LOCKSCREEN_CALENDAR_ALARM = "lockscreen_calendar_alarm";
private static final String LOCKSCREEN_CALENDAR_REMINDERS_ONLY = "lockscreen_calendar_reminders_only";
@@ -57,6 +58,7 @@ public class LockscreenWidgetsActivity extends PreferenceActivity implements
private CheckBoxPreference mAlbumArtPref;
private CheckBoxPreference mAlwaysMusicControlPref;
private CheckBoxPreference mAlwaysBatteryPref;
+ private CheckBoxPreference mFlashlightPref;
private CheckBoxPreference mCalendarAlarmPref;
private CheckBoxPreference mCalendarRemindersOnlyPref;
private ListPreference mLockscreenMusicHeadsetPref;
@@ -115,6 +117,11 @@ public void onCreate(Bundle savedInstanceState) {
mAlwaysBatteryPref.setChecked(Settings.System.getInt(getContentResolver(),
Settings.System.LOCKSCREEN_ALWAYS_BATTERY, 0) == 1);
+ /* Flashlight toggle when long pressing HOME button on lockscreen */
+ mFlashlightPref = (CheckBoxPreference) prefSet.findPreference(LOCKSCREEN_FLASHLIGHT);
+ mFlashlightPref.setChecked(Settings.System.getInt(getContentResolver(),
+ Settings.System.LOCKSCREEN_FLASHLIGHT, 0) == 1);
+
/* Calendars */
mCalendarsPref = (MultiSelectListPreference) prefSet.findPreference(LOCKSCREEN_CALENDARS);
mCalendarsPref.setValue(Settings.System.getString(getContentResolver(),
@@ -193,6 +200,11 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
Settings.System.putInt(getContentResolver(), Settings.System.LOCKSCREEN_ALWAYS_BATTERY,
value ? 1 : 0);
return true;
+ } else if (preference == mFlashlightPref) {
+ value = mFlashlightPref.isChecked();
+ Settings.System.putInt(getContentResolver(), Settings.System.LOCKSCREEN_FLASHLIGHT,
+ value ? 1 : 0);
+ return true;
} else if (preference == mCalendarAlarmPref) {
value = mCalendarAlarmPref.isChecked();
Settings.System.putInt(getContentResolver(), Settings.System.LOCKSCREEN_CALENDAR_ALARM,
diff --git a/src/com/cyanogenmod/cmparts/activities/PerformanceSettingsActivity.java b/src/com/cyanogenmod/cmparts/activities/PerformanceSettingsActivity.java
index f14939cba..58bedef5b 100644
--- a/src/com/cyanogenmod/cmparts/activities/PerformanceSettingsActivity.java
+++ b/src/com/cyanogenmod/cmparts/activities/PerformanceSettingsActivity.java
@@ -30,6 +30,8 @@
import android.preference.PreferenceScreen;
import android.provider.Settings;
+import android.util.Log;
+
import java.io.File;
/**
@@ -63,6 +65,14 @@ public class PerformanceSettingsActivity extends PreferenceActivity implements P
private static final String HEAPSIZE_DEFAULT = "16m";
+ private static final String SDCARDCACHESIZE_PREF = "pref_sdcardcachesize";
+
+ private static final String SDCARDCACHESIZE_PROP = "sys.sdcardcache.readsize";
+
+ private static final String SDCARDCACHESIZE_PERSIST_PROP = "persist.sys.sdcardcachereadsize";
+
+ private static final String SDCARDCACHESIZE_DEFAULT = "128KB";
+
private static final String USE_DITHERING_PREF = "pref_use_dithering";
private static final String USE_DITHERING_PERSIST_PROP = "persist.sys.use_dithering";
@@ -119,6 +129,8 @@ public class PerformanceSettingsActivity extends PreferenceActivity implements P
private ListPreference mHeapsizePref;
+ private ListPreference mSdcardcachesizePref;
+
private AlertDialog alertDialog;
private int swapAvailable = -1;
@@ -172,6 +184,11 @@ protected void onCreate(Bundle savedInstanceState) {
SystemProperties.get(HEAPSIZE_PROP, HEAPSIZE_DEFAULT)));
mHeapsizePref.setOnPreferenceChangeListener(this);
+ mSdcardcachesizePref = (ListPreference) prefSet.findPreference(SDCARDCACHESIZE_PREF);
+ mSdcardcachesizePref.setValue(SystemProperties.get(SDCARDCACHESIZE_PERSIST_PROP,
+ SystemProperties.get(SDCARDCACHESIZE_PROP, SDCARDCACHESIZE_DEFAULT)));
+ mSdcardcachesizePref.setOnPreferenceChangeListener(this);
+
mDisableBootanimPref = (CheckBoxPreference) prefSet.findPreference(DISABLE_BOOTANIMATION_PREF);
String disableBootanimation = SystemProperties.get(DISABLE_BOOTANIMATION_PERSIST_PROP, DISABLE_BOOTANIMATION_DEFAULT);
mDisableBootanimPref.setChecked("1".equals(disableBootanimation));
@@ -260,6 +277,17 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
}
}
+ if (preference == mSdcardcachesizePref) {
+ if (newValue != null) {
+ SystemProperties.set(SDCARDCACHESIZE_PERSIST_PROP, (String)newValue);
+ //String TAG = "CMParts";
+ //Log.v(TAG, "Setting "+SDCARDCACHESIZE_PERSIST_PROP+" to " + (String)newValue);
+ //Log.v(TAG, "Current persist system prop: " + SystemProperties.get(SDCARDCACHESIZE_PERSIST_PROP));
+ //Log.v(TAG, "Current system prop: " + SystemProperties.get(SDCARDCACHESIZE_PROP));
+ return true;
+ }
+ }
+
if (preference == mCompcachePref) {
if (newValue != null) {
SystemProperties.set(COMPCACHE_PERSIST_PROP, (String)newValue);
diff --git a/src/com/cyanogenmod/cmparts/activities/SoundActivity.java b/src/com/cyanogenmod/cmparts/activities/SoundActivity.java
index d8b9a08e2..0c9aa493a 100644
--- a/src/com/cyanogenmod/cmparts/activities/SoundActivity.java
+++ b/src/com/cyanogenmod/cmparts/activities/SoundActivity.java
@@ -54,6 +54,8 @@ public class SoundActivity extends PreferenceActivity implements OnPreferenceCha
private static final String VOLUME_CONTROL_SILENT = "vol-ctrl-silent";
private static final String VIBRATE_IN_CALL = "vibrate-in-call";
+
+ private static final String RINGER_LOOP_PREF = "pref_ringer_loop";
private static final String LOCK_VOLUME_KEYS = "lock-volume-keys";
@@ -107,6 +109,11 @@ public void onCreate(Bundle savedInstanceState) {
p.setChecked(Settings.System.getInt(getContentResolver(),
Settings.System.VIBRATE_IN_CALL, 1) != 0);
p.setOnPreferenceChangeListener(this);
+
+ p = (CheckBoxPreference) prefSet.findPreference(RINGER_LOOP_PREF);
+ p.setChecked(Settings.System.getInt(getContentResolver(),
+ Settings.System.RINGER_LOOP, 1) != 0);
+ p.setOnPreferenceChangeListener(this);
p = (CheckBoxPreference) prefSet.findPreference(LOCK_VOLUME_KEYS);
p.setChecked(Settings.System.getInt(getContentResolver(),
@@ -175,6 +182,9 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
} else if (key.equals(LOCK_VOLUME_KEYS)) {
Settings.System.putInt(getContentResolver(), Settings.System.LOCK_VOLUME_KEYS,
getBoolean(newValue) ? 1 : 0);
+ } else if (key.equals(RINGER_LOOP_PREF)) {
+ Settings.System.putInt(getContentResolver(), Settings.System.RINGER_LOOP,
+ getBoolean(newValue) ? 1 : 0);
} else if (key.equals(NOTIFICATIONS_SPEAKER) || key.equals(RINGS_SPEAKER)
|| key.equals(ALARMS_SPEAKER)) {
SystemProperties.set(getKey(key), getBoolean(newValue) ? "1" : "0");
diff --git a/src/com/cyanogenmod/cmparts/activities/UIStatusBarActivity.java b/src/com/cyanogenmod/cmparts/activities/UIStatusBarActivity.java
index fa04e9ee5..643c3b67a 100644
--- a/src/com/cyanogenmod/cmparts/activities/UIStatusBarActivity.java
+++ b/src/com/cyanogenmod/cmparts/activities/UIStatusBarActivity.java
@@ -46,10 +46,13 @@ public class UIStatusBarActivity extends PreferenceActivity implements OnPrefere
private static final String PREF_STATUS_BAR_CARRIER_LABEL_CUSTOM =
"pref_status_bar_carrier_label_custom";
+ private static final String PREF_STATUS_BAR_CENTERCLOCK = "pref_status_bar_centerclock";
+
+ private static final String PREF_STATUS_BAR_CLOCKCOLOR = "pref_status_bar_clockcolor";
+
private static final String PREF_STATUS_BAR_COMPACT_CARRIER = "pref_status_bar_compact_carrier";
- private static final String PREF_STATUS_BAR_BRIGHTNESS_CONTROL =
- "pref_status_bar_brightness_control";
+ private static final String PREF_STATUS_BAR_BRIGHTNESS_CONTROL = "pref_status_bar_brightness_control";
private static final String PREF_STATUS_BAR_CM_SIGNAL = "pref_status_bar_cm_signal";
@@ -65,6 +68,10 @@ public class UIStatusBarActivity extends PreferenceActivity implements OnPrefere
private CheckBoxPreference mStatusBarClock;
+ private CheckBoxPreference mStatusBarCenterClock;
+
+ private Preference mStatusBarClockColor;
+
private CheckBoxPreference mStatusBarCompactCarrier;
private CheckBoxPreference mStatusBarBrightnessControl;
@@ -83,15 +90,20 @@ public void onCreate(Bundle savedInstanceState) {
PreferenceScreen prefSet = getPreferenceScreen();
mStatusBarClock = (CheckBoxPreference) prefSet.findPreference(PREF_STATUS_BAR_CLOCK);
+ mStatusBarCenterClock = (CheckBoxPreference) prefSet.findPreference(PREF_STATUS_BAR_CENTERCLOCK);
+ mStatusBarClockColor = (Preference) prefSet.findPreference(PREF_STATUS_BAR_CLOCKCOLOR);
+ mStatusBarClockColor.setSummary(Integer.toHexString(getClockColor()));
+ mStatusBarClockColor.setOnPreferenceChangeListener(this);
mStatusBarCompactCarrier = (CheckBoxPreference) prefSet
.findPreference(PREF_STATUS_BAR_COMPACT_CARRIER);
mStatusBarBrightnessControl = (CheckBoxPreference) prefSet
.findPreference(PREF_STATUS_BAR_BRIGHTNESS_CONTROL);
- mStatusBarHeadset = (CheckBoxPreference) prefSet
- .findPreference(PREF_STATUS_BAR_HEADSET);
+ mStatusBarHeadset = (CheckBoxPreference) prefSet.findPreference(PREF_STATUS_BAR_HEADSET);
mStatusBarClock.setChecked((Settings.System.getInt(getContentResolver(),
Settings.System.STATUS_BAR_CLOCK, 1) == 1));
+ mStatusBarCenterClock.setChecked((Settings.System.getInt(getContentResolver(),
+ Settings.System.STATUS_BAR_CENTERCLOCK, 1) == 1));
mStatusBarCompactCarrier.setChecked((Settings.System.getInt(getContentResolver(),
Settings.System.STATUS_BAR_COMPACT_CARRIER, 0) == 1));
mStatusBarBrightnessControl.setChecked((Settings.System.getInt(getContentResolver(),
@@ -100,8 +112,8 @@ public void onCreate(Bundle savedInstanceState) {
Settings.System.STATUS_BAR_HEADSET, 1) == 1));
try {
- if (Settings.System.getInt(getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
+ if (Settings.System
+ .getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
mStatusBarBrightnessControl.setEnabled(false);
mStatusBarBrightnessControl.setSummary(R.string.ui_status_bar_toggle_info);
}
@@ -204,6 +216,15 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
Settings.System.putInt(getContentResolver(), Settings.System.STATUS_BAR_CLOCK,
value ? 1 : 0);
return true;
+ } else if (preference == mStatusBarCenterClock) {
+ value = mStatusBarCenterClock.isChecked();
+ Settings.System.putInt(getContentResolver(), Settings.System.STATUS_BAR_CENTERCLOCK,
+ value ? 1 : 0);
+ return true;
+ } else if (preference == mStatusBarClockColor) {
+ ColorPickerDialog cp = new ColorPickerDialog(this, mClockColorListener, getClockColor());
+ cp.show();
+ return true;
} else if (preference == mStatusBarCompactCarrier) {
value = mStatusBarCompactCarrier.isChecked();
Settings.System.putInt(getContentResolver(),
@@ -222,4 +243,19 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
}
return false;
}
+
+ private int getClockColor() {
+ return Settings.System.getInt(getContentResolver(),
+ Settings.System.STATUS_BAR_CLOCKCOLOR, 1);
+ }
+
+ ColorPickerDialog.OnColorChangedListener mClockColorListener =
+ new ColorPickerDialog.OnColorChangedListener() {
+ public void colorChanged(int color) {
+ Settings.System.putInt(getContentResolver(), Settings.System.STATUS_BAR_CLOCKCOLOR, color);
+ mStatusBarClockColor.setSummary(Integer.toHexString(color));
+ }
+ public void colorUpdate(int color) {
+ }
+ };
}
diff --git a/src/com/cyanogenmod/cmparts/intents/CPUReceiver.java b/src/com/cyanogenmod/cmparts/intents/CPUReceiver.java
index c67ac373b..e9e92fcef 100644
--- a/src/com/cyanogenmod/cmparts/intents/CPUReceiver.java
+++ b/src/com/cyanogenmod/cmparts/intents/CPUReceiver.java
@@ -29,11 +29,24 @@
import java.util.Arrays;
import java.util.List;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import android.provider.Settings;
+import java.io.DataOutputStream;
+import java.io.DataInputStream;
+
public class CPUReceiver extends BroadcastReceiver {
private static final String TAG = "CPUSettings";
private static final String CPU_SETTINGS_PROP = "sys.cpufreq.restored";
+
+ private static final String ULTRA_BRIGHTNESS_PROP = "persist.sys.ultrabrightness";
+
+ private static final String UNDERVOLTING_PROP = "persist.sys.undervolt";
+
+ private static String UV_MODULE;
@Override
public void onReceive(Context ctx, Intent intent) {
@@ -44,15 +57,36 @@ public void onReceive(Context ctx, Intent intent) {
} else {
SystemProperties.set(CPU_SETTINGS_PROP, "false");
}
+
+ if (SystemProperties.getBoolean(ULTRA_BRIGHTNESS_PROP, false) == true) {
+ writeOneLine("/sys/devices/platform/i2c-adapter/i2c-0/0-0036/mode", "i2c_pwm");
+ Log.e(TAG, "Ultra Brightness writing i2c_pwm: ");
+ }
+ else {
+ writeOneLine("/sys/devices/platform/i2c-adapter/i2c-0/0-0036/mode", "i2c_pwm_als");
+ Log.e(TAG, "Ultra Brightness writing i2c_pwm_als: ");
+ }
+
}
private void configureCPU(Context ctx) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
-
+
if (prefs.getBoolean(CPUActivity.SOB_PREF, false) == false) {
+ SystemProperties.set(UNDERVOLTING_PROP, "0");
Log.i(TAG, "Restore disabled by user preference.");
return;
}
+
+ UV_MODULE = ctx.getResources().getString(com.cyanogenmod.cmparts.R.string.undervolting_module);
+ if (SystemProperties.getBoolean(UNDERVOLTING_PROP, false) == true) {
+ // insmod undervolting module
+ insmod(UV_MODULE, true);
+ }
+ else {
+ // remove undervolting module
+ //insmod(UV_MODULE, false);
+ }
String governor = prefs.getString(CPUActivity.GOV_PREF, null);
String minFrequency = prefs.getString(CPUActivity.MIN_FREQ_PREF, null);
@@ -85,4 +119,49 @@ private void configureCPU(Context ctx) {
Log.d(TAG, "CPU settings restored.");
}
}
+
+ public static boolean writeOneLine(String fname, String value) {
+ try {
+ FileWriter fw = new FileWriter(fname);
+ try {
+ fw.write(value);
+ } finally {
+ fw.close();
+ }
+ } catch (IOException e) {
+ String Error = "Error writing to " + fname + ". Exception: ";
+ Log.e(TAG, Error, e);
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean insmod(String module, boolean insert) {
+ String command;
+ if (insert)
+ command = "/system/bin/insmod /system/lib/modules/" + module;
+ else
+ command = "/system/bin/rmmod " + module;
+ try
+ {
+ Process process = Runtime.getRuntime().exec("su");
+ Log.e(TAG, "Executing: " + command);
+ DataOutputStream outputStream = new DataOutputStream(process.getOutputStream());
+ DataInputStream inputStream = new DataInputStream(process.getInputStream());
+ outputStream.writeBytes(command + "\n");
+ outputStream.flush();
+ outputStream.writeBytes("exit\n");
+ outputStream.flush();
+ process.waitFor();
+ }
+ catch (IOException e)
+ {
+ return false;
+ }
+ catch (InterruptedException e)
+ {
+ return false;
+ }
+ return true;
+ }
}