/* * Copyright (C) 2011-2012 sakuramilk <c.sakuramilk@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sakuramilk.TweakGS2.CpuControl; import net.sakuramilk.TweakGS2.R; import net.sakuramilk.util.Misc; import android.content.Intent; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.view.Menu; import android.view.MenuItem; public class CpuControlPreferenceActivity extends PreferenceActivity implements OnPreferenceChangeListener, OnPreferenceClickListener { private CpuControlSetting mSetting; private ListPreference mGovernorList; private PreferenceScreen mGovernorSetting; private ListPreference mMaxFreq; private ListPreference mMinFreq; private ListPreference mMaxSuspendFreq; private ListPreference mMinSuspendFreq; private String getFreqText(String value) { if (value == null) { return getText(R.string.none).toString(); } else { return (Integer.valueOf(value) / 1000) + "MHz"; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.cpu_control_pref); mSetting = new CpuControlSetting(this); // governor mGovernorList = (ListPreference)findPreference(CpuControlSetting.KEY_CPU_GOV_LIST); String[] availableGovernors = mSetting.getAvailableGovernors(); mGovernorList.setEntries(availableGovernors); mGovernorList.setEntryValues(availableGovernors); String scalingGovernor = mSetting.getScalingGovernor(); mGovernorList.setSummary(Misc.getCurrentValueText(this, scalingGovernor)); mGovernorList.setValue(scalingGovernor); mGovernorList.setOnPreferenceChangeListener(this); mGovernorSetting = (PreferenceScreen)findPreference(CpuControlSetting.KEY_CPU_GOV_SETTING); mGovernorSetting.setOnPreferenceClickListener(this); // cpu freq String[] availableFrequencies = mSetting.getAvailableFrequencies(); String curMaxFreqValue = mSetting.getScalingMaxFreq(); String curMinFreqValue = mSetting.getScalingMinFreq(); String savedMaxFreqValue = mSetting.loadScalingMaxFreq(); String savedMinFreqValue = mSetting.loadScalingMinFreq(); String[] availableFreqEntries = Misc.getFreqencyEntries(availableFrequencies); mMaxFreq = (ListPreference)findPreference(CpuControlSetting.KEY_CPU_MAX_FREQ); mMaxFreq.setEntries(availableFreqEntries); mMaxFreq.setEntryValues(availableFrequencies); mMaxFreq.setValue(curMaxFreqValue); mMaxFreq.setOnPreferenceChangeListener(this); mMaxFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(curMaxFreqValue), getFreqText(savedMaxFreqValue))); mMinFreq = (ListPreference)findPreference(CpuControlSetting.KEY_CPU_MIN_FREQ); mMinFreq.setEntries(availableFreqEntries); mMinFreq.setEntryValues(availableFrequencies); mMinFreq.setValue(curMinFreqValue); mMinFreq.setOnPreferenceChangeListener(this); mMinFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(curMinFreqValue), getFreqText(savedMinFreqValue))); if (mSetting.isEnableSuspendFreq()) { String curMaxSuspendFreqValue = mSetting.getScalingMaxSuspendFreq(); String curMinSuspendFreqValue = mSetting.getScalingMinSuspendFreq(); String savedMaxSuspendFreqValue = mSetting.loadScalingMaxSuspendFreq(); String savedMinSuspendFreqValue = mSetting.loadScalingMinSuspendFreq(); mMaxSuspendFreq = (ListPreference)findPreference(CpuControlSetting.KEY_CPU_MAX_SUSPEND_FREQ); mMaxSuspendFreq.setEnabled(true); mMaxSuspendFreq.setEntries(availableFreqEntries); mMaxSuspendFreq.setEntryValues(availableFrequencies); mMaxSuspendFreq.setValue(curMaxSuspendFreqValue); mMaxSuspendFreq.setOnPreferenceChangeListener(this); mMaxSuspendFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(curMaxSuspendFreqValue), getFreqText(savedMaxSuspendFreqValue))); mMinSuspendFreq = (ListPreference)findPreference(CpuControlSetting.KEY_CPU_MIN_SUSPEND_FREQ); mMinSuspendFreq.setEnabled(true); mMinSuspendFreq.setEntries(availableFreqEntries); mMinSuspendFreq.setEntryValues(availableFrequencies); mMinSuspendFreq.setValue(curMinSuspendFreqValue); mMinSuspendFreq.setOnPreferenceChangeListener(this); mMinSuspendFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(curMinSuspendFreqValue), getFreqText(savedMinSuspendFreqValue))); } } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mGovernorList) { String value = newValue.toString(); mSetting.setScalingGovernor(value); mSetting.saveScalingGovernor(value); mGovernorList.setSummary(Misc.getCurrentValueText(this, value)); return false; } else if (preference == mMaxFreq) { String value = newValue.toString(); mSetting.setScalingMaxFreq(value); mSetting.saveScalingMaxFreq(value); mMaxFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(value), getFreqText(value))); return false; } else if (preference == mMinFreq) { String value = newValue.toString(); mSetting.setScalingMinFreq(value); mSetting.saveScalingMinFreq(value); mMinFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(value), getFreqText(value))); return false; } else if (preference == mMaxSuspendFreq) { String value = newValue.toString(); mSetting.setScalingMaxSuspendFreq(value); mSetting.saveScalingMaxSuspendFreq(value); mMaxSuspendFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(value), getFreqText(value))); return false; } else if (preference == mMinSuspendFreq) { String value = newValue.toString(); mSetting.setScalingMinSuspendFreq(value); mSetting.saveScalingMinSuspendFreq(value); mMinSuspendFreq.setSummary(Misc.getCurrentAndSavedValueText( this, getFreqText(value), getFreqText(value))); return false; } return false; } @Override public boolean onPreferenceClick(Preference preference) { if (preference == mGovernorSetting) { Intent intent = new Intent(getApplicationContext(), CpuGovernorPreferenceActivity.class); intent.putExtra("governor", mSetting.getScalingGovernor()); this.startActivity(intent); } return false; } @Override public boolean onCreateOptionsMenu(Menu menu) { boolean ret = super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.reset_menu, menu); return ret; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_reset: mSetting.reset(); Misc.confirmReboot(this, R.string.reboot_reflect_comfirm); return true; default: return super.onOptionsItemSelected(item); } } }