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; + } }