/* * 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 java.util.ArrayList; import net.sakuramilk.TweakGS2.R; import net.sakuramilk.util.Misc; import net.sakuramilk.widget.ApplyButtonPreferenceActivity; import net.sakuramilk.widget.ConfirmDialog; import net.sakuramilk.widget.SeekBarPreference; import net.sakuramilk.widget.SeekBarPreference.OnSeekBarPreferenceDoneListener; import android.content.Context; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; public class CpuVoltagePreferenceActivity extends ApplyButtonPreferenceActivity implements OnSeekBarPreferenceDoneListener, OnClickListener, OnPreferenceChangeListener { private Context mContext; private ListPreference mAsvGroup; private CpuVoltageSetting mSetting; private ArrayList<SeekBarPreference> mFreqPrefList; private String[] mCurVoltTable; private String[] mSavedVoltTable; private String mCurAsvGroup; private String mSavedAsvGroup; private void setValues() { mAsvGroup.setValue(mSavedAsvGroup); mAsvGroup.setSummary(Misc.getCurrentAndSavedValueText(mContext, Misc.getEntryFromEntryValue(mAsvGroup.getEntries(),mAsvGroup.getEntryValues(), mCurAsvGroup), Misc.getEntryFromEntryValue(mAsvGroup.getEntries(),mAsvGroup.getEntryValues(), mSavedAsvGroup))); for (int i = 0; i < mCurVoltTable.length; i++) { SeekBarPreference pref = mFreqPrefList.get(i); pref.setValue(1500, 700, mSavedVoltTable[i] == null ? Integer.valueOf(mCurVoltTable[i]) : Integer.valueOf(mSavedVoltTable[i])); pref.setSummary(Misc.getCurrentAndSavedValueText(this, mCurVoltTable[i] + "mV", (mSavedVoltTable[i] == null ? getText(R.string.none).toString() : mSavedVoltTable[i] + "mV"))); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; addPreferencesFromResource(R.xml.cpu_control_voltage_pref); mSetting = new CpuVoltageSetting(this); mApplyButton.setOnClickListener(this); mCurAsvGroup = mSetting.getAsvGroup(); mAsvGroup = (ListPreference)findPreference(CpuVoltageSetting.KEY_ASV_GROUP); if (Misc.isNullOfEmpty(mCurAsvGroup)) { mAsvGroup.setEnabled(false); } else { mSavedAsvGroup = mSetting.loadAsvGroup(); mAsvGroup.setValue(mSavedAsvGroup); mAsvGroup.setOnPreferenceChangeListener(this); mAsvGroup.setSummary(Misc.getCurrentAndSavedValueText(this, Misc.getEntryFromEntryValue(mAsvGroup.getEntries(),mAsvGroup.getEntryValues(), mCurAsvGroup), Misc.getEntryFromEntryValue(mAsvGroup.getEntries(),mAsvGroup.getEntryValues(), mSavedAsvGroup))); } CpuControlSetting cpuSetting = new CpuControlSetting(this); String[] availableFrequencies = cpuSetting.getAvailableFrequencies(); ArrayList<String> list = new ArrayList<String>(); for (String freq : availableFrequencies) { list.add(String.valueOf(Integer.parseInt(freq) / 1000) + "MHz"); } String[] availableFreqEntries = list.toArray(new String[0]); PreferenceManager prefManager = getPreferenceManager(); PreferenceScreen rootPref = (PreferenceScreen)prefManager.findPreference(CpuVoltageSetting.KEY_CPU_VOLT_ROOT_PREF); if (mSetting.isEnableVoltageControl()) { mFreqPrefList = new ArrayList<SeekBarPreference>(); mCurVoltTable = mSetting.getVoltageTable(); mSavedVoltTable = new String[mCurVoltTable.length]; for (int i = 0; i < availableFrequencies.length; i++) { SeekBarPreference pref = new SeekBarPreference(this, null); String freq = String.valueOf(Integer.parseInt(availableFrequencies[i]) / 1000); String key = CpuVoltageSetting.KEY_CPU_VOLT_CTRL_BASE + freq; mSavedVoltTable[i] = mSetting.loadVoltage(key); pref.setKey(key); pref.setTitle(availableFreqEntries[i]); pref.setOnPreferenceDoneListener(this); rootPref.addPreference(pref); mFreqPrefList.add(pref); } setValues(); } else { PreferenceScreen pref = prefManager.createPreferenceScreen(this); pref.setTitle(R.string.not_support); rootPref.addPreference(pref); } } @Override public void onClick(View v) { mApplyButton.setEnabled(false); mSetting.setAsvGroup(mSavedAsvGroup); mCurAsvGroup = mSavedAsvGroup; mCurVoltTable = mSetting.getVoltageTable(); for (int i = 0; i < mSavedVoltTable.length; i++) { if (mSavedVoltTable[i] != null) { mCurVoltTable[i] = mSavedVoltTable[i]; } } mSetting.setVoltageTable(mCurVoltTable); setValues(); } @Override public boolean onPreferenceDone(Preference preference, String newValue) { mApplyButton.setEnabled(true); int index = mFreqPrefList.indexOf(preference); mSavedVoltTable[index] = newValue; preference.setSummary(Misc.getCurrentAndSavedValueText(this, mCurVoltTable[index] + "mV", newValue + "mV")); return true; } @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(); return true; default: return super.onOptionsItemSelected(item); } } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mAsvGroup) { if (mCurAsvGroup.equals(newValue.toString())) { return false; } final ConfirmDialog dlg = new ConfirmDialog(this); final String newAsvValue = newValue.toString(); dlg.setResultListener(new ConfirmDialog.ResultListener() { @Override public void onYes() { mSetting.reset(); for (int i = 0; i < mSavedVoltTable.length; i++) { mSavedVoltTable[i] = null; } mSavedAsvGroup = newAsvValue; mSetting.saveAsvGroup(mSavedAsvGroup); mAsvGroup.setValue(mSavedAsvGroup); mAsvGroup.setSummary(Misc.getCurrentAndSavedValueText(mContext, Misc.getEntryFromEntryValue(mAsvGroup.getEntries(),mAsvGroup.getEntryValues(), mCurAsvGroup), Misc.getEntryFromEntryValue(mAsvGroup.getEntries(),mAsvGroup.getEntryValues(), mSavedAsvGroup))); mApplyButton.setEnabled(true); } @Override public void onCancel() { } }); dlg.show(android.R.string.dialog_alert_title, R.string.cpu_asv_group_change_message); } return false; } }