package com.android.settings;
/*
************************************************************************************
* Android Settings
* (c) Copyright 2006-2010, huanglong Allwinner
* All Rights Reserved
*
* File : SaturationPreference.java
* By : huanglong
* Version : v1.0
* Date : 2011-9-5 16:20:00
* Description: Add the Saturation settings to Display.
* Update : date author version notes
*
************************************************************************************
*/
import android.content.Context;
import android.preference.SeekBarDialogPreference;
import android.preference.SeekBarPreference;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.AttributeSet;
import android.util.Log;
import android.view.DisplayManagerAw;
import android.view.View;
import android.widget.SeekBar;
import java.lang.Integer;
import android.os.SystemProperties;
import com.softwinner.SecureFile;
import java.lang.Integer;
import java.lang.String;
import java.lang.Exception;
public class DisplayTrimmingPreference extends SeekBarDialogPreference implements
SeekBar.OnSeekBarChangeListener{
private SeekBar mSeekBar;
private int OldValue;
private int MAXIMUM_VALUE = 100;
private int MINIMUM_VALUE = 90;
private String DISPLAY_AREA_RADIO = "display.area_radio";
private DisplayManagerAw mDisplayManagerAw;
public DisplayTrimmingPreference(Context context, AttributeSet attrs) {
super(context, attrs);
mDisplayManagerAw = (DisplayManagerAw) context.getSystemService(Context.DISPLAY_SERVICE_AW);
setDialogLayoutResource(R.layout.preference_dialog_saturation);
setDialogIcon(R.drawable.ic_settings_saturation);
}
protected void onBindDialogView(View view){
super.onBindDialogView(view);
mSeekBar = getSeekBar(view);
mSeekBar.setMax(MAXIMUM_VALUE-MINIMUM_VALUE);
OldValue = getSysInt();
Log.d("staturation","" + OldValue);
mSeekBar.setProgress(OldValue - MINIMUM_VALUE);
mSeekBar.setOnSeekBarChangeListener(this);
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromTouch){
setDisplayPercent(progress + MINIMUM_VALUE);
}
@Override
protected void onDialogClosed(boolean positiveResult){
if(positiveResult){
putSysInt(mSeekBar.getProgress() + MINIMUM_VALUE);
}else{
setDisplayPercent(OldValue);
}
super.onDialogClosed(positiveResult);
}
private int getSysInt()
{
SecureFile file = new SecureFile(DISPLAY_AREA_RADIO);
if(!file.exists())
{
putSysInt(95);
}
byte[] ret = new byte[255];
file.read(ret);
String st = new String(ret).substring(0,2);
int retInt = 95;
try{
retInt = Integer.valueOf(st).intValue();
if(retInt == 10) retInt = MAXIMUM_VALUE;
}catch(Exception e){
Log.d("chen","file is broken,rebuild it again");
file.delete();
putSysInt(retInt);
}
Log.d("chen","save " + st + " in /private,value is " + retInt);
return retInt;
}
private boolean putSysInt(int value)
{
SecureFile file = new SecureFile(DISPLAY_AREA_RADIO);
if(!file.exists()) file.createFile();
byte[] bt = String.valueOf(value).getBytes();
boolean ret = file.write(bt,false);
String st = new String(bt);
Log.d("chen","file content is " + st + " value is " + value);
Log.d("chen","write value to " + file.getPath() + " is " + getSysInt());
return ret;
}
private void setDisplayPercent(int value) {
mDisplayManagerAw.setDisplayAreaPercent(0,value);
}
/*implements method in SeekBar.OnSeekBarChangeListener*/
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// NA
}
/*implements method in SeekBar.OnSeekBarChangeListener*/
@Override
public void onStopTrackingTouch(SeekBar arg0) {
// NA
}
}