diff options
Diffstat (limited to 'DeviceSettings/src/com/cyanogenmod/settings/device/AudioOut.java')
-rw-r--r-- | DeviceSettings/src/com/cyanogenmod/settings/device/AudioOut.java | 269 |
1 files changed, 0 insertions, 269 deletions
diff --git a/DeviceSettings/src/com/cyanogenmod/settings/device/AudioOut.java b/DeviceSettings/src/com/cyanogenmod/settings/device/AudioOut.java deleted file mode 100644 index 179a7dd..0000000 --- a/DeviceSettings/src/com/cyanogenmod/settings/device/AudioOut.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (C) 2013 The CyanogenMod Project - * - * 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 com.cyanogenmod.settings.device; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.graphics.Color; -import android.graphics.LightingColorFilter; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.os.Bundle; -import android.os.Vibrator; -import android.preference.DialogPreference; -import android.preference.PreferenceManager; -import android.util.AttributeSet; -import android.util.Log; -import android.view.View; -import android.widget.SeekBar; -import android.widget.TextView; -import android.widget.Button; - -import java.lang.Math; -import java.text.DecimalFormat; - -/** - * Special preference type that allows configuration of audio out volume on some smdk4412 - * Devices - */ -public class AudioOut extends DialogPreference implements SeekBar.OnSeekBarChangeListener { - private static final String TAG = "DeviceSettings_AudioOut"; - - private static String AUDIOOUT_HEADPHONE_FILE = "/data/local/audio/out_headphone"; - private static String AUDIOOUT_SPEAKER_FILE = "/data/local/audio/out_speaker"; - private static int MAX_VALUE; - private static int WARNING_THRESHOLD; - private static int DEFAULT_VALUE; - private static int MIN_VALUE; - - private SeekBar mHeadphoneSeekBar; - private SeekBar mSpeakerSeekBar; - private TextView mHeadphoneValue; - private TextView mSpeakerValue; - private TextView mWarning; - - private String mHeadphoneOgValue; - private String mSpeakerOgValue; - private int mHeadphoneOgPercent; - private int mSpeakerOgPercent; - - private Drawable mHeadphoneProgressDrawable; - private Drawable mSpeakerProgressDrawable; - private Drawable mHeadphoneProgressThumb; - private Drawable mSpeakerProgressThumb; - private LightingColorFilter mRedFilter; - - private enum Device { - headphone, - speaker - } - - public AudioOut(Context context, AttributeSet attrs) { - super(context, attrs); - - MAX_VALUE = Integer.valueOf(context.getResources().getString(R.string.audioout_max_value)); - WARNING_THRESHOLD = Integer.valueOf(context.getResources().getString(R.string.audioout_warning_threshold)); - DEFAULT_VALUE = Integer.valueOf(context.getResources().getString(R.string.audioout_default_value)); - MIN_VALUE = Integer.valueOf(context.getResources().getString(R.string.audioout_min_value)); - - setDialogLayoutResource(R.layout.preference_dialog_output_audio_tuning); - } - - @Override - protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { - builder.setNeutralButton(R.string.defaults_button, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - } - }); - } - - @Override - protected void onBindDialogView(View view) { - super.onBindDialogView(view); - - mHeadphoneSeekBar = (SeekBar) view.findViewById(R.id.audioout_headphone_seekbar); - mHeadphoneValue = (TextView) view.findViewById(R.id.audioout_headphone_value); - mSpeakerSeekBar = (SeekBar) view.findViewById(R.id.audioout_speaker_seekbar); - mSpeakerValue = (TextView) view.findViewById(R.id.audioout_speaker_value); - mWarning = (TextView) view.findViewById(R.id.audioout_textWarn); - - String strWarnMsg = getContext().getResources().getString(R.string.audioout_warning, volumeToPercent(WARNING_THRESHOLD)); - mWarning.setText(strWarnMsg); - - Drawable progressDrawableHeadphone = mHeadphoneSeekBar.getProgressDrawable(); - if (progressDrawableHeadphone instanceof LayerDrawable) { - LayerDrawable ldHeadphone = (LayerDrawable) progressDrawableHeadphone; - mHeadphoneProgressDrawable = ldHeadphone.findDrawableByLayerId(android.R.id.progress); - } - Drawable progressDrawableSpeaker = mSpeakerSeekBar.getProgressDrawable(); - if (progressDrawableSpeaker instanceof LayerDrawable) { - LayerDrawable ldSpeaker = (LayerDrawable) progressDrawableSpeaker; - mSpeakerProgressDrawable = ldSpeaker.findDrawableByLayerId(android.R.id.progress); - } - - mHeadphoneProgressThumb = mHeadphoneSeekBar.getThumb(); - mSpeakerProgressThumb = mSpeakerSeekBar.getThumb(); - - mRedFilter = new LightingColorFilter(Color.BLACK, - getContext().getResources().getColor(android.R.color.holo_red_light)); - - mHeadphoneOgValue = Utils.readOneLine(AUDIOOUT_HEADPHONE_FILE); - mHeadphoneOgPercent = volumeToPercent(Integer.parseInt(mHeadphoneOgValue)); - - mHeadphoneSeekBar.setOnSeekBarChangeListener(this); - mHeadphoneSeekBar.setProgress(Integer.valueOf(mHeadphoneOgPercent)); - - mSpeakerOgValue = Utils.readOneLine(AUDIOOUT_SPEAKER_FILE); - mSpeakerOgPercent = volumeToPercent(Integer.parseInt(mSpeakerOgValue)); - - mSpeakerSeekBar.setOnSeekBarChangeListener(this); - mSpeakerSeekBar.setProgress(Integer.valueOf(mSpeakerOgPercent)); - } - - @Override - protected void showDialog(Bundle state) { - super.showDialog(state); - - // can't use onPrepareDialogBuilder for this as we want the dialog - // to be kept open on click - AlertDialog d = (AlertDialog) getDialog(); - Button defaultsButton = d.getButton(DialogInterface.BUTTON_NEUTRAL); - defaultsButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mHeadphoneSeekBar.setProgress(volumeToPercent(DEFAULT_VALUE)); - mSpeakerSeekBar.setProgress(volumeToPercent(DEFAULT_VALUE)); - } - }); - } - - @Override - protected void onDialogClosed(boolean positiveResult) { - super.onDialogClosed(positiveResult); - int volumeHeadphone, volumeSpeaker; - - if (positiveResult) { - Editor editor = getEditor(); - - volumeHeadphone = percentToVolume(mHeadphoneSeekBar.getProgress()); - editor.putString(AUDIOOUT_HEADPHONE_FILE, String.valueOf(volumeHeadphone)); - volumeSpeaker = percentToVolume(mSpeakerSeekBar.getProgress()); - editor.putString(AUDIOOUT_SPEAKER_FILE, String.valueOf(volumeSpeaker)); - editor.commit(); - } else { - Utils.writeValue(AUDIOOUT_HEADPHONE_FILE, String.valueOf(mHeadphoneOgValue)); - Utils.writeValue(AUDIOOUT_SPEAKER_FILE, String.valueOf(mSpeakerOgValue)); - } - } - - public static void restore(Context context) { - SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); - - if (isSupported("headphone")) - Utils.writeValue(AUDIOOUT_HEADPHONE_FILE, sharedPrefs.getString(AUDIOOUT_HEADPHONE_FILE, "50")); - if (isSupported("speaker")) - Utils.writeValue(AUDIOOUT_SPEAKER_FILE, sharedPrefs.getString(AUDIOOUT_SPEAKER_FILE, "50")); - } - - public static boolean isSupported(String output) { - String FILE = null; - Device outputDevice = Device.valueOf(output); - - switch(outputDevice) { - case headphone: - FILE = AUDIOOUT_HEADPHONE_FILE; - case speaker: - FILE = AUDIOOUT_SPEAKER_FILE; - } - return Utils.fileExists(FILE); - } - - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - boolean shouldWarn = progress >= volumeToPercent(WARNING_THRESHOLD); - int stepSize = 1; - progress = Math.round(progress/stepSize)*stepSize; - - if(seekBar == mHeadphoneSeekBar){ - if (mHeadphoneProgressDrawable != null) { - mHeadphoneProgressDrawable.setColorFilter(shouldWarn ? mRedFilter : null); - } - if (mHeadphoneProgressThumb != null) { - mHeadphoneProgressThumb.setColorFilter(shouldWarn ? mRedFilter : null); - } - mHeadphoneSeekBar.setProgress(progress); - Utils.writeValue(AUDIOOUT_HEADPHONE_FILE, String.valueOf(percentToVolume(progress))); - mHeadphoneValue.setText(String.format("%d%%", progress)); - }else if(seekBar == mSpeakerSeekBar){ - if (mSpeakerProgressDrawable != null) { - mSpeakerProgressDrawable.setColorFilter(shouldWarn ? mRedFilter : null); - } - if (mSpeakerProgressThumb != null) { - mSpeakerProgressThumb.setColorFilter(shouldWarn ? mRedFilter : null); - } - mSpeakerSeekBar.setProgress(progress); - Utils.writeValue(AUDIOOUT_SPEAKER_FILE, String.valueOf(percentToVolume(progress))); - mSpeakerValue.setText(String.format("%d%%", progress)); - } - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - // Do nothing - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - //Vibrator vib = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); - //vib.vibrate(200); - } - - /** - * Convert volume to percent - */ - public static int volumeToPercent(int volume) { - double maxValue = MAX_VALUE; - double minValue = MIN_VALUE; - - double percent = Math.round((volume - minValue) * (100 / (maxValue - minValue))); - - if (percent > 100) - percent = 100; - else if (percent < 0) - percent = 0; - - return (int) percent; - } - - /** - * Convert percent to volume - */ - public static int percentToVolume(int percent) { - int volume = Math.round((((MAX_VALUE - MIN_VALUE) * percent) / 100) + MIN_VALUE); - - if (volume > MAX_VALUE) - volume = MAX_VALUE; - else if (volume < MIN_VALUE) - volume = MIN_VALUE; - - return volume; - } -} |