#15466: Add audio volume seekbar in audio preferences
diff --git a/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
index b65ac18..4cd3578 100644
--- a/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
@@ -32,6 +32,9 @@
package com.savoirfairelinux.sflphone.client;
import android.app.Activity;
+import android.content.Context;
+import android.graphics.Typeface;
+import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
@@ -39,9 +42,15 @@
import android.preference.PreferenceScreen;
import android.os.Bundle;
import android.util.Log;
+import android.util.AttributeSet;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
@@ -58,7 +67,7 @@
setPreferenceScreen(getAudioPreferenceScreen());
}
- Preference.OnPreferenceChangeListener changeListListener = new Preference.OnPreferenceChangeListener() {
+ Preference.OnPreferenceChangeListener changePreferenceListener = new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(CURRENT_VALUE + (CharSequence)newValue);
return true;
@@ -75,6 +84,7 @@
audioPrefCat.setTitle(R.string.audio_preferences);
root.addPreference(audioPrefCat);
+ // Codec List
ListPreference codecListPref = new ListPreference(currentContext);
codecListPref.setEntries(R.array.audio_codec_list);
codecListPref.setEntryValues(R.array.audio_codec_list_value);
@@ -82,9 +92,148 @@
codecListPref.setPersistent(false);
codecListPref.setTitle(R.string.title_audio_codec_list);
codecListPref.setSummary(CURRENT_VALUE + "PCMU");
- codecListPref.setOnPreferenceChangeListener(changeListListener);
+ codecListPref.setOnPreferenceChangeListener(changePreferenceListener);
audioPrefCat.addPreference(codecListPref);
+ // Ringtone
+ EditTextPreference audioRingtonePref = new EditTextPreference(currentContext);
+ audioRingtonePref.setDialogTitle(R.string.dialogtitle_audio_ringtone_field);
+ audioRingtonePref.setPersistent(false);
+ audioRingtonePref.setTitle(R.string.title_audio_ringtone_field);
+ audioRingtonePref.setSummary(CURRENT_VALUE + "path/to/ringtone");
+ audioRingtonePref.setOnPreferenceChangeListener(changePreferenceListener);
+ audioPrefCat.addPreference(audioRingtonePref);
+
+ // Speaker volume seekbar
+ SeekBarPreference speakerSeekBarPref = new SeekBarPreference(currentContext);
+ speakerSeekBarPref.setPersistent(false);
+ speakerSeekBarPref.setTitle("Speaker Volume");
+ speakerSeekBarPref.setSummary("Set the volume for speaker");
+ audioPrefCat.addPreference(speakerSeekBarPref);
+
+ // Capture volume seekbar
+ SeekBarPreference captureSeekBarPref = new SeekBarPreference(currentContext);
+ captureSeekBarPref.setPersistent(false);
+ captureSeekBarPref.setTitle("Capture Volume");
+ captureSeekBarPref.setSummary("Set the volume for microphone");
+ audioPrefCat.addPreference(captureSeekBarPref);
+
+ // Ringtone volume seekbar
+ SeekBarPreference ringtoneSeekBarPref = new SeekBarPreference(currentContext);
+ ringtoneSeekBarPref.setPersistent(false);
+ ringtoneSeekBarPref.setTitle("Ringtone Volume");
+ ringtoneSeekBarPref.setSummary("Set the volume for ringtone");
+ audioPrefCat.addPreference(ringtoneSeekBarPref);
+
return root;
}
+
+ public class SeekBarPreference extends Preference implements OnSeekBarChangeListener
+ {
+ public int MAXIMUM = 100;
+ public int INTERVAL = 5;
+ private float oldValue = 25;
+ private TextView Indicator;
+
+ public SeekBarPreference(Context context)
+ {
+ super(context);
+ }
+
+ public SeekBarPreference(Context context, AttributeSet attrs)
+ {
+ super(context, attrs);
+ }
+
+ public SeekBarPreference(Context context, AttributeSet attrs, int defStyle)
+ {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent)
+ {
+ float scale = getContext().getResources().getDisplayMetrics().density;
+
+ RelativeLayout layout = new RelativeLayout(getContext());
+
+ RelativeLayout.LayoutParams textParams = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT);
+
+ RelativeLayout.LayoutParams sbarParams = new RelativeLayout.LayoutParams(
+ Math.round(scale * 160),
+ RelativeLayout.LayoutParams.WRAP_CONTENT);
+
+ RelativeLayout.LayoutParams indParams = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT);
+
+ TextView preferenceText = new TextView(getContext());
+ preferenceText.setId(0);
+ preferenceText.setText(getTitle());
+ preferenceText.setTextSize(18);
+ preferenceText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
+
+ SeekBar sbar = new SeekBar(getContext());
+ sbar.setId(1);
+ sbar.setMax(MAXIMUM);
+ sbar.setProgress((int)this.oldValue);
+ sbar.setOnSeekBarChangeListener(this);
+
+ this.Indicator = new TextView(getContext());
+ this.Indicator.setTextSize(12);
+ this.Indicator.setTypeface(Typeface.MONOSPACE, Typeface.ITALIC);
+ this.Indicator.setText("" + sbar.getProgress());
+
+ textParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
+ sbarParams.addRule(RelativeLayout.RIGHT_OF, preferenceText.getId());
+ indParams.setMargins(Math.round(20*scale), 0, 0, 0);
+ indParams.addRule(RelativeLayout.RIGHT_OF, sbar.getId());
+
+ preferenceText.setLayoutParams(textParams);
+ sbar.setLayoutParams(sbarParams);
+ this.Indicator.setLayoutParams(indParams);
+ layout.addView(preferenceText);
+ layout.addView(this.Indicator);
+ layout.addView(sbar);
+ layout.setId(android.R.id.widget_frame);
+
+ return layout;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
+ {
+ progress = Math.round(((float) progress)/INTERVAL) * INTERVAL;
+
+ if(!callChangeListener(progress)) {
+ seekBar.setProgress((int) this.oldValue);
+ return;
+ }
+
+ seekBar.setProgress(progress);
+ this.oldValue = progress;
+ this.Indicator.setText("" + progress);
+ updatePreference(progress);
+
+ notifyChanged();
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar)
+ {
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar)
+ {
+ }
+
+ private void updatePreference(int newValue) {
+ // SharedPreference.Editor editor = getEditor();
+ // editor.putInt(getKey(), newValue);
+ // editor.commit();
+ }
+ }
}