/* * Copyright (C) 2013 - 2014 Alexander "Evisceration" Martinz * * 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 3 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, see <http://www.gnu.org/licenses/>. * */ package org.namelessrom.devicecontrol.modules.device.sub; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceScreen; import org.namelessrom.devicecontrol.DeviceConstants; import org.namelessrom.devicecontrol.R; import org.namelessrom.devicecontrol.models.BootupConfig; import org.namelessrom.devicecontrol.modules.bootup.BootupItem; import org.namelessrom.devicecontrol.preferences.AwesomeTogglePreference; import org.namelessrom.devicecontrol.preferences.CustomEditTextPreference; import org.namelessrom.devicecontrol.preferences.CustomListPreference; import org.namelessrom.devicecontrol.preferences.CustomPreference; import org.namelessrom.devicecontrol.views.AttachPreferenceFragment; import org.namelessrom.devicecontrol.utils.Utils; public class FastChargeFragment extends AttachPreferenceFragment implements Preference.OnPreferenceChangeListener { private static final String FC_BASE = "/sys/kernel/fast_charge"; private static final String FC_FORCE = FC_BASE + "/force_fast_charge"; private static final String FC_AC_LEVELS = FC_BASE + "/ac_levels"; private static final String FC_AC_LEVEL = FC_BASE + "/ac_charge_level"; private static final String FC_USB_LEVELS = FC_BASE + "/usb_levels"; private static final String FC_USB_LEVEL = FC_BASE + "/usb_charge_level"; private static final String FC_VERSION = FC_BASE + "/version"; //---------------------------------------------------------------------------------------------- private boolean isNewVersion = false; private CustomListPreference mForceFastCharge; private AwesomeTogglePreference mFailsafe; private CustomPreference mAcLevelsValid; private CustomEditTextPreference mAcLevel; private CustomPreference mUsbLevelsValid; private CustomEditTextPreference mUsbLevel; @Override protected int getFragmentId() { return DeviceConstants.ID_FAST_CHARGE; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.device_extras_fast_charge); final PreferenceScreen mRoot = getPreferenceScreen(); String tmp; final CustomPreference mVersion = (CustomPreference) findPreference("version"); if (mVersion != null) { if (Utils.fileExists(FC_VERSION)) { tmp = Utils.readOneLine(FC_VERSION); mVersion.setSummary(tmp); isNewVersion = tmp.toLowerCase().contains("by paul reioux"); } else { isNewVersion = false; mRoot.removePreference(mVersion); } } mForceFastCharge = (CustomListPreference) findPreference("force_fast_charge"); if (mForceFastCharge != null) { if (Utils.fileExists(FC_FORCE)) { final String[] values = isNewVersion ? new String[]{ "0", "1", "2" } : new String[]{ "0", "1" }; mForceFastCharge.setEntries(values); mForceFastCharge.setEntryValues(values); mForceFastCharge.setValue(Utils.readOneLine(FC_FORCE)); mForceFastCharge.setSummary(getForceSummary(mForceFastCharge.getValue())); mForceFastCharge.setOnPreferenceChangeListener(this); } else { mRoot.removePreference(mForceFastCharge); } } mFailsafe = (AwesomeTogglePreference) findPreference("failsafe"); if (mFailsafe != null) { if (isNewVersion && mFailsafe.isSupported()) { mFailsafe.initValue(); mFailsafe.setOnPreferenceChangeListener(this); } else { mRoot.removePreference(mFailsafe); } } mAcLevelsValid = (CustomPreference) findPreference("ac_levels_valid"); if (mAcLevelsValid != null) { if (isNewVersion && Utils.fileExists(FC_AC_LEVELS)) { if (mFailsafe != null && mFailsafe.isChecked()) { tmp = Utils.readOneLine(FC_AC_LEVELS); mAcLevelsValid.setSummary(tmp); } else { mAcLevelsValid.setSummary(R.string.any_level_valid); } } else { mRoot.removePreference(mAcLevelsValid); } } mAcLevel = (CustomEditTextPreference) findPreference("ac_level"); if (mAcLevel != null) { if (isNewVersion && Utils.fileExists(FC_AC_LEVEL)) { tmp = Utils.readOneLine(FC_AC_LEVEL); mAcLevel.setText(tmp); mAcLevel.setSummary(tmp); mAcLevel.setOnPreferenceChangeListener(this); } else { mRoot.removePreference(mAcLevel); } } mUsbLevelsValid = (CustomPreference) findPreference("usb_levels_valid"); if (mUsbLevelsValid != null) { if (isNewVersion && Utils.fileExists(FC_USB_LEVELS)) { if (mFailsafe != null && mFailsafe.isChecked()) { tmp = Utils.readOneLine(FC_USB_LEVELS); mUsbLevelsValid.setSummary(tmp); } else { mUsbLevelsValid.setSummary(R.string.any_level_valid); } } else { mRoot.removePreference(mUsbLevelsValid); } } mUsbLevel = (CustomEditTextPreference) findPreference("usb_level"); if (mUsbLevel != null) { if (isNewVersion && Utils.fileExists(FC_USB_LEVEL)) { tmp = Utils.readOneLine(FC_USB_LEVEL); mUsbLevel.setText(tmp); mUsbLevel.setSummary(tmp); mUsbLevel.setOnPreferenceChangeListener(this); } else { mRoot.removePreference(mUsbLevel); } } isSupported(getPreferenceScreen(), getActivity()); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (mForceFastCharge == preference) { final String value = String.valueOf(newValue); Utils.writeValue(FC_FORCE, value); mForceFastCharge.setSummary(getForceSummary(Utils.readOneLine(FC_FORCE))); BootupConfig.setBootup(new BootupItem( BootupConfig.CATEGORY_DEVICE, "force_fast_charge", FC_FORCE, value, true)); return true; } else if (mFailsafe == preference) { final boolean value = (Boolean) newValue; mFailsafe.writeValue(value); if (mAcLevelsValid != null) { if (!value) { mAcLevelsValid.setSummary(R.string.any_level_valid); } else { mAcLevelsValid.setSummary(Utils.readOneLine(FC_AC_LEVELS)); } } if (mUsbLevelsValid != null) { if (!value) { mUsbLevelsValid.setSummary(R.string.any_level_valid); } else { mUsbLevelsValid.setSummary(Utils.readOneLine(FC_USB_LEVELS)); } } String tmp; if (mAcLevel != null) { tmp = Utils.readOneLine(FC_AC_LEVEL); mAcLevel.setText(tmp); mAcLevel.setSummary(tmp); } if (mUsbLevel != null) { tmp = Utils.readOneLine(FC_USB_LEVEL); mUsbLevel.setText(tmp); mUsbLevel.setSummary(tmp); } return true; } else if (mAcLevel == preference) { final String value = String.valueOf(newValue); Utils.writeValue(FC_AC_LEVEL, value); final String currentValue = Utils.readOneLine(FC_AC_LEVEL); mAcLevel.setSummary(currentValue); mAcLevel.setText(currentValue); BootupConfig.setBootup(new BootupItem( BootupConfig.CATEGORY_DEVICE, "ac_level", FC_AC_LEVEL, value, true)); return true; } else if (mUsbLevel == preference) { final String value = String.valueOf(newValue); Utils.writeValue(FC_USB_LEVEL, value); final String currentValue = Utils.readOneLine(FC_USB_LEVEL); mUsbLevel.setSummary(currentValue); mUsbLevel.setText(currentValue); BootupConfig.setBootup(new BootupItem( BootupConfig.CATEGORY_DEVICE, "usb_level", FC_USB_LEVEL, value, true)); return true; } return false; } private int getForceSummary(final String value) { if (value == null || value.isEmpty()) return R.string.unknown; switch (value) { case "0": return R.string.fast_charge_0; case "1": if (isNewVersion) { return R.string.fast_charge_1_new; } else { return R.string.fast_charge_1_old; } case "2": return R.string.fast_charge_2; default: return R.string.unknown; } } }