package com.android.settings.aokp;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.PowerManager;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.support.v14.preference.SwitchPreference;
import android.provider.Settings;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
public class AmbientSettings extends SettingsPreferenceFragment
implements Preference.OnPreferenceChangeListener {
private static final String TAG = "AmbientSettings";
private static final String KEY_DOZE = "doze";
private static final String KEY_DOZE_PULSE_IN = "doze_pulse_in";
private static final String KEY_DOZE_PULSE_VISIBLE = "doze_pulse_visible";
private static final String KEY_DOZE_PULSE_OUT = "doze_pulse_out";
private static final String KEY_DOZE_BRIGHTNESS_LEVEL = "doze_brightness_level";
private static final String SYSTEMUI_METADATA_NAME = "com.android.systemui";
private SwitchPreference mDozePreference;
private ListPreference mDozePulseIn;
private ListPreference mDozePulseVisible;
private ListPreference mDozePulseOut;
private DozeBrightnessDialog mDozeBrightnessDialog;
private Preference mDozeBrightness;
@Override
protected int getMetricsCategory() {
return MetricsEvent.ACTION_AMBIENT_DISPLAY;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Activity activity = getActivity();
ContentResolver resolver = getActivity().getContentResolver();
addPreferencesFromResource(R.xml.ambient_settings);
mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
mDozePreference.setOnPreferenceChangeListener(this);
mDozePulseIn = (ListPreference) findPreference(KEY_DOZE_PULSE_IN);
mDozePulseIn.setOnPreferenceChangeListener(this);
mDozePulseVisible = (ListPreference) findPreference(KEY_DOZE_PULSE_VISIBLE);
mDozePulseVisible.setOnPreferenceChangeListener(this);
mDozePulseOut = (ListPreference) findPreference(KEY_DOZE_PULSE_OUT);
mDozePulseOut.setOnPreferenceChangeListener(this);
updateDozeOptions();
mDozeBrightness = (Preference) findPreference(KEY_DOZE_BRIGHTNESS_LEVEL);
}
private void updateDozeOptions() {
if (mDozePulseIn != null) {
final int statusDozePulseIn = Settings.System.getInt(getContentResolver(),
Settings.System.DOZE_PULSE_DURATION_IN, 500);
mDozePulseIn.setValue(String.valueOf(statusDozePulseIn));
int index = mDozePulseIn.findIndexOfValue(String.valueOf(statusDozePulseIn));
if (index != -1) {
mDozePulseIn.setSummary(mDozePulseIn.getEntries()[index]);
}
}
if (mDozePulseVisible != null) {
final int statusDozePulseVisible = Settings.System.getInt(getContentResolver(),
Settings.System.DOZE_PULSE_DURATION_VISIBLE, 3000);
mDozePulseVisible.setValue(String.valueOf(statusDozePulseVisible));
int index = mDozePulseVisible.findIndexOfValue(String.valueOf(statusDozePulseVisible));
if (index != -1) {
mDozePulseVisible.setSummary(mDozePulseVisible.getEntries()[index]);
}
}
if (mDozePulseOut != null) {
final int statusDozePulseOut = Settings.System.getInt(getContentResolver(),
Settings.System.DOZE_PULSE_DURATION_OUT, 500);
mDozePulseOut.setValue(String.valueOf(statusDozePulseOut));
int index = mDozePulseOut.findIndexOfValue(String.valueOf(statusDozePulseOut));
if (index != -1) {
mDozePulseOut.setSummary(mDozePulseOut.getEntries()[index]);
}
}
}
@Override
public void onResume() {
super.onResume();
updateState();
updateDozeOptions();
}
@Override
public void onPause() {
super.onPause();
}
private void updateState() {
// Update doze if it is available.
if (mDozePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), Settings.Secure.DOZE_ENABLED,
getActivity().getResources().getBoolean(
com.android.internal.R.bool.config_doze_enabled_by_default) ? 1 : 0);
mDozePreference.setChecked(value != 0);
}
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (preference == mDozeBrightness) {
showDozeBrightnessDialog();
return true;
}
return super.onPreferenceTreeClick(preference);
}
@Override
public boolean onPreferenceChange(Preference preference, Object objValue) {
if (preference == mDozePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), Settings.Secure.DOZE_ENABLED, value ? 1 : 0);
} else if (preference == mDozePulseIn) {
int dozePulseIn = Integer.parseInt((String)objValue);
int index = mDozePulseIn.findIndexOfValue((String) objValue);
mDozePulseIn.setSummary(mDozePulseIn.getEntries()[index]);
Settings.System.putInt(getContentResolver(),
Settings.System.DOZE_PULSE_DURATION_IN, dozePulseIn);
} else if (preference == mDozePulseVisible) {
int dozePulseVisible = Integer.parseInt((String)objValue);
int index = mDozePulseVisible.findIndexOfValue((String) objValue);
mDozePulseVisible.setSummary(mDozePulseVisible.getEntries()[index]);
Settings.System.putInt(getContentResolver(),
Settings.System.DOZE_PULSE_DURATION_VISIBLE, dozePulseVisible);
} else if (preference == mDozePulseOut) {
int dozePulseOut = Integer.parseInt((String)objValue);
int index = mDozePulseOut.findIndexOfValue((String) objValue);
mDozePulseOut.setSummary(mDozePulseOut.getEntries()[index]);
Settings.System.putInt(getContentResolver(),
Settings.System.DOZE_PULSE_DURATION_OUT, dozePulseOut);
}
return true;
}
private static boolean isPickupSensorUsedByDefault(Context context) {
return getConfigBoolean(context, "doze_pulse_on_pick_up");
}
private static Boolean getConfigBoolean(Context context, String configBooleanName) {
int resId = -1;
Boolean b = true;
PackageManager pm = context.getPackageManager();
if (pm == null) {
return null;
}
Resources systemUiResources;
try {
systemUiResources = pm.getResourcesForApplication(SYSTEMUI_METADATA_NAME);
} catch (Exception e) {
Log.e("DozeSettings:", "can't access systemui resources",e);
return null;
}
resId = systemUiResources.getIdentifier(
SYSTEMUI_METADATA_NAME + ":bool/" + configBooleanName, null, null);
if (resId > 0) {
b = systemUiResources.getBoolean(resId);
}
return b;
}
private void showDozeBrightnessDialog() {
if (mDozeBrightnessDialog != null && mDozeBrightnessDialog.isShowing()) {
return;
}
mDozeBrightnessDialog = new DozeBrightnessDialog(getActivity());
mDozeBrightnessDialog.show();
}
private class DozeBrightnessDialog extends AlertDialog implements DialogInterface.OnClickListener {
private SeekBar mBacklightBar;
private EditText mBacklightInput;
private int mCurrentBrightness;
private int mMaxBrightness;
public DozeBrightnessDialog(Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
final View v = getLayoutInflater().inflate(R.layout.dialog_doze_brightness, null);
final Context context = getContext();
mBacklightBar = (SeekBar) v.findViewById(R.id.doze_seek);
mBacklightInput = (EditText) v.findViewById(R.id.doze_input);
setTitle(R.string.doze_brightness_level_title);
setCancelable(true);
setView(v);
final int dozeBrightnessConfig = getResources().getInteger(
com.android.internal.R.integer.config_screenBrightnessDoze);
mCurrentBrightness = Settings.System.getInt(getContentResolver(),
Settings.System.DOZE_SCREEN_BRIGHTNESS, dozeBrightnessConfig);
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mMaxBrightness = pm.getMaximumScreenBrightnessSetting();
mBacklightBar.setMax(mMaxBrightness);
mBacklightBar.setProgress(mCurrentBrightness);
mBacklightInput.setText(String.valueOf(mCurrentBrightness));
initListeners();
setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.okay), this);
setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), this);
super.onCreate(savedInstanceState);
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
try {
int newBacklight = Integer.valueOf(mBacklightInput.getText().toString());
Settings.System.putInt(getContext().getContentResolver(),
Settings.System.DOZE_SCREEN_BRIGHTNESS, newBacklight);
} catch (NumberFormatException e) {
Log.d(TAG, "NumberFormatException " + e);
}
}
}
private void initListeners() {
mBacklightBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (seekBar.getProgress() > 0) {
mBacklightInput.setText(String.valueOf(seekBar.getProgress()));
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mBacklightInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
boolean ok = false;
try {
int minValue = 1;
int maxValue = mMaxBrightness;
int newBrightness = Integer.valueOf(s.toString());
if (newBrightness >= minValue && newBrightness <= maxValue) {
ok = true;
mBacklightBar.setProgress(newBrightness);
}
} catch (NumberFormatException e) {
//ignored, ok is false ayway
}
Button okButton = mDozeBrightnessDialog.getButton(DialogInterface.BUTTON_POSITIVE);
if (okButton != null) {
okButton.setEnabled(ok);
}
}
});
}
}
}