package com.eolwral.osmonitor.preferences;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
public class SetCPURangePreference extends DialogPreference {
Spinner FreqMaxSpinner = null;
Spinner FreqMinSpinner = null;
@Override
protected View onCreateDialogView() {
if(GetCPUFreqList() == null)
return new View(this.getContext());
this.FreqMaxSpinner = new Spinner(this.getContext());
this.FreqMinSpinner = new Spinner(this.getContext());
ArrayAdapter<String> FreqAdapter = new ArrayAdapter<String>(this.getContext(), android.R.layout.simple_spinner_item,
GetCPUFreqList());
FreqAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
FreqMaxSpinner.setAdapter(FreqAdapter);
FreqMinSpinner.setAdapter(FreqAdapter);
if(getPersistedString("None").equals("None"))
{
FreqMaxSpinner.setSelection(FreqAdapter.getCount()-1);
FreqMinSpinner.setSelection(0);
}
else
{
String Freqs[] = getPersistedString("").split(";");
if(Freqs.length > 0 )
{
for (int CurFreq = 0; CurFreq < FreqAdapter.getCount(); CurFreq++)
{
if(FreqAdapter.getItem(CurFreq).trim().equals(Freqs[0]))
FreqMinSpinner.setSelection(CurFreq);
if(FreqAdapter.getItem(CurFreq).trim().equals(Freqs[1]))
FreqMaxSpinner.setSelection(CurFreq);
}
}
}
LinearLayout FreqLayout = new LinearLayout(this.getContext());
TextView FreqArrow = new TextView(this.getContext());
FreqArrow.setText(" <--> ");
FreqLayout.addView(FreqMinSpinner);
FreqLayout.addView(FreqArrow);
FreqLayout.addView(FreqMaxSpinner);
return FreqLayout;
}
private String [] GetCPUFreqList()
{
String [] FreqList = null;
try {
byte[] RawData = new byte[256];
File CPUFreq = new File("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies");
BufferedInputStream bInputStream =
new BufferedInputStream(new FileInputStream(CPUFreq));
bInputStream.read(RawData);
String CPUFreqList = (new String(RawData)).trim();
bInputStream.close();
FreqList = CPUFreqList.split(" ");
if(FreqList.length == 0)
FreqList = null;
} catch (Exception e) {
FreqList = null;
}
return FreqList;
}
@Override
protected void onDialogClosed(boolean positiveResult) {
if(positiveResult){
persistString(FreqMinSpinner.getSelectedItem().toString()+ ";"+
FreqMaxSpinner.getSelectedItem().toString());
}
super.onDialogClosed(positiveResult);
}
public SetCPURangePreference(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public SetCPURangePreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}