blob: 954eb496096ff3710e7412c3532cece3271eed09 [file] [log] [blame]
Alexandre Savarddcd37402012-09-06 18:36:48 -04001/*
2 * Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
3 *
4 * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *
20 * Additional permission under GNU GPL version 3 section 7:
21 *
22 * If you modify this program, or any covered work, by linking or
23 * combining it with the OpenSSL project's OpenSSL library (or a
24 * modified version of that library), containing parts covered by the
25 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
26 * grants you additional permission to convey the resulting work.
27 * Corresponding Source for a non-source form of such a combination
28 * shall include the source code for the parts of OpenSSL used as well
29 * as that of the covered work.
30 */
31
alisionf76de3b2013-04-16 15:35:22 -040032package com.savoirfairelinux.sflphone.fragments;
Alexandre Savarddcd37402012-09-06 18:36:48 -040033
Alexandre Savard393ccab2012-09-11 15:01:20 -040034import android.app.Activity;
Alexandre Savard5e0b9472012-09-11 17:56:30 -040035import android.content.Context;
Alexandre Savarde2bb2592012-09-11 18:39:57 -040036import android.content.res.TypedArray;
Alexandre Savard5e0b9472012-09-11 17:56:30 -040037import android.graphics.Typeface;
38import android.preference.EditTextPreference;
Alexandre Savard393ccab2012-09-11 15:01:20 -040039import android.preference.ListPreference;
40import android.preference.Preference;
41import android.preference.PreferenceCategory;
42import android.preference.PreferenceFragment;
43import android.preference.PreferenceScreen;
Alexandre Savarddcd37402012-09-06 18:36:48 -040044import android.os.Bundle;
45import android.util.Log;
Alexandre Savard5e0b9472012-09-11 17:56:30 -040046import android.util.AttributeSet;
Alexandre Savarddcd37402012-09-06 18:36:48 -040047import android.view.View;
Alexandre Savard5e0b9472012-09-11 17:56:30 -040048import android.view.ViewGroup;
Alexandre Savarde2bb2592012-09-11 18:39:57 -040049import android.widget.LinearLayout;
Alexandre Savard5e0b9472012-09-11 17:56:30 -040050import android.widget.SeekBar;
51import android.widget.SeekBar.OnSeekBarChangeListener;
Alexandre Savard5e0b9472012-09-11 17:56:30 -040052import android.widget.TextView;
Alexandre Savarddcd37402012-09-06 18:36:48 -040053
54import com.savoirfairelinux.sflphone.R;
55
alisiond9e29442013-04-17 16:10:18 -040056public class AudioManagementFragment extends PreferenceFragment
Alexandre Savarddcd37402012-09-06 18:36:48 -040057{
58 static final String TAG = "PrefManagementFragment";
Alexandre Savard393ccab2012-09-11 15:01:20 -040059 static final String CURRENT_VALUE = "Current value:: ";
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040060
alisiond9e29442013-04-17 16:10:18 -040061 public AudioManagementFragment()
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040062 {
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040063 }
Alexandre Savarddcd37402012-09-06 18:36:48 -040064
65 @Override
Alexandre Savard393ccab2012-09-11 15:01:20 -040066 public void onCreate(Bundle savedInstanceState)
Alexandre Savarddcd37402012-09-06 18:36:48 -040067 {
Alexandre Savard393ccab2012-09-11 15:01:20 -040068 super.onCreate(savedInstanceState);
Alexandre Savarddcd37402012-09-06 18:36:48 -040069
Alexandre Savard393ccab2012-09-11 15:01:20 -040070 setPreferenceScreen(getAudioPreferenceScreen());
Alexandre Savarddcd37402012-09-06 18:36:48 -040071 }
72
Alexandre Savard5e0b9472012-09-11 17:56:30 -040073 Preference.OnPreferenceChangeListener changePreferenceListener = new Preference.OnPreferenceChangeListener() {
Alexandre Savard393ccab2012-09-11 15:01:20 -040074 public boolean onPreferenceChange(Preference preference, Object newValue) {
75 preference.setSummary(CURRENT_VALUE + (CharSequence)newValue);
76 return true;
77 }
78 };
79
80 public PreferenceScreen getAudioPreferenceScreen()
Alexandre Savarddcd37402012-09-06 18:36:48 -040081 {
Alexandre Savard393ccab2012-09-11 15:01:20 -040082 Activity currentContext = getActivity();
83
84 PreferenceScreen root = getPreferenceManager().createPreferenceScreen(currentContext);
85
86 PreferenceCategory audioPrefCat = new PreferenceCategory(currentContext);
87 audioPrefCat.setTitle(R.string.audio_preferences);
88 root.addPreference(audioPrefCat);
89
Alexandre Savard5e0b9472012-09-11 17:56:30 -040090 // Codec List
Alexandre Savard393ccab2012-09-11 15:01:20 -040091 ListPreference codecListPref = new ListPreference(currentContext);
92 codecListPref.setEntries(R.array.audio_codec_list);
93 codecListPref.setEntryValues(R.array.audio_codec_list_value);
94 codecListPref.setDialogTitle(R.string.dialogtitle_audio_codec_list);
95 codecListPref.setPersistent(false);
96 codecListPref.setTitle(R.string.title_audio_codec_list);
97 codecListPref.setSummary(CURRENT_VALUE + "PCMU");
Alexandre Savard5e0b9472012-09-11 17:56:30 -040098 codecListPref.setOnPreferenceChangeListener(changePreferenceListener);
Alexandre Savard393ccab2012-09-11 15:01:20 -040099 audioPrefCat.addPreference(codecListPref);
100
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400101 // Ringtone
102 EditTextPreference audioRingtonePref = new EditTextPreference(currentContext);
103 audioRingtonePref.setDialogTitle(R.string.dialogtitle_audio_ringtone_field);
104 audioRingtonePref.setPersistent(false);
105 audioRingtonePref.setTitle(R.string.title_audio_ringtone_field);
106 audioRingtonePref.setSummary(CURRENT_VALUE + "path/to/ringtone");
107 audioRingtonePref.setOnPreferenceChangeListener(changePreferenceListener);
108 audioPrefCat.addPreference(audioRingtonePref);
109
110 // Speaker volume seekbar
111 SeekBarPreference speakerSeekBarPref = new SeekBarPreference(currentContext);
112 speakerSeekBarPref.setPersistent(false);
113 speakerSeekBarPref.setTitle("Speaker Volume");
Alexandre Savard74eccf32012-09-11 19:12:29 -0400114 speakerSeekBarPref.setProgress(50);
115 speakerSeekBarPref.setSummary(CURRENT_VALUE + speakerSeekBarPref.getProgress());
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400116 audioPrefCat.addPreference(speakerSeekBarPref);
117
118 // Capture volume seekbar
119 SeekBarPreference captureSeekBarPref = new SeekBarPreference(currentContext);
120 captureSeekBarPref.setPersistent(false);
121 captureSeekBarPref.setTitle("Capture Volume");
Alexandre Savard74eccf32012-09-11 19:12:29 -0400122 captureSeekBarPref.setProgress(50);
123 captureSeekBarPref.setSummary(CURRENT_VALUE + captureSeekBarPref.getProgress());
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400124 audioPrefCat.addPreference(captureSeekBarPref);
125
126 // Ringtone volume seekbar
127 SeekBarPreference ringtoneSeekBarPref = new SeekBarPreference(currentContext);
128 ringtoneSeekBarPref.setPersistent(false);
129 ringtoneSeekBarPref.setTitle("Ringtone Volume");
Alexandre Savard74eccf32012-09-11 19:12:29 -0400130 ringtoneSeekBarPref.setProgress(50);
131 ringtoneSeekBarPref.setSummary(CURRENT_VALUE + ringtoneSeekBarPref.getProgress());
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400132 audioPrefCat.addPreference(ringtoneSeekBarPref);
133
Alexandre Savard393ccab2012-09-11 15:01:20 -0400134 return root;
Alexandre Savarddcd37402012-09-06 18:36:48 -0400135 }
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400136
137 public class SeekBarPreference extends Preference implements OnSeekBarChangeListener
138 {
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400139 private SeekBar seekbar;
140 private int progress;
141 private int max = 100;
142 private TextView summary;
143 private boolean discard;
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400144
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400145 public SeekBarPreference (Context context)
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400146 {
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400147 super( context );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400148 }
149
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400150 public SeekBarPreference (Context context, AttributeSet attrs)
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400151 {
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400152 super( context, attrs );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400153 }
154
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400155 public SeekBarPreference (Context context, AttributeSet attrs, int defStyle)
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400156 {
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400157 super( context, attrs, defStyle );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400158 }
159
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400160 protected View onCreateView (ViewGroup p)
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400161 {
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400162 final Context ctx = getContext();
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400163
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400164 LinearLayout layout = new LinearLayout( ctx );
165 layout.setId( android.R.id.widget_frame );
166 layout.setOrientation( LinearLayout.VERTICAL );
Alexandre Savard74eccf32012-09-11 19:12:29 -0400167 layout.setPadding(65, 10, 15, 10);
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400168
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400169 TextView title = new TextView( ctx );
170 int textColor = title.getCurrentTextColor();
171 title.setId( android.R.id.title );
172 title.setSingleLine();
Alexandre Savard74eccf32012-09-11 19:12:29 -0400173 title.setTextAppearance( ctx, android.R.style.TextAppearance_Medium );
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400174 title.setTextColor( textColor );
175 layout.addView( title );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400176
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400177 summary = new TextView( ctx );
178 summary.setId( android.R.id.summary );
179 summary.setSingleLine();
180 summary.setTextAppearance( ctx, android.R.style.TextAppearance_Small );
181 summary.setTextColor( textColor );
182 layout.addView( summary );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400183
Alexandre Savard616c3802012-09-12 09:44:46 -0400184 seekbar = new SeekBar( ctx );
185 seekbar.setId( android.R.id.progress );
186 seekbar.setMax( max );
187 seekbar.setOnSeekBarChangeListener( this );
188 layout.addView( seekbar );
189
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400190 return layout;
191 }
192
193 @Override
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400194 protected void onBindView (View view)
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400195 {
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400196 super.onBindView( view );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400197
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400198 if (seekbar != null)
199 seekbar.setProgress( progress );
200 }
201
202 public void setProgress (int pcnt) {
203 if (progress != pcnt) {
204 persistInt( progress = pcnt );
205
206 notifyDependencyChange( shouldDisableDependents() );
207 notifyChanged();
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400208 }
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400209 }
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400210
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400211 public int getProgress () {
212 return progress;
213 }
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400214
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400215 public void setMax (int max) {
216 this.max = max;
217 if (seekbar != null)
218 seekbar.setMax( max );
219 }
220
221 private SeekBar getSeekBar () {
222 return seekbar;
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400223 }
224
225 @Override
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400226 protected Object onGetDefaultValue (TypedArray a, int index) {
227 return a.getInt( index, progress );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400228 }
229
230 @Override
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400231 protected void onSetInitialValue (boolean restoreValue, Object defaultValue) {
232 setProgress( restoreValue ? getPersistedInt( progress ) : (Integer)defaultValue );
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400233 }
234
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400235 @Override
236 public boolean shouldDisableDependents () {
237 return progress == 0 || super.shouldDisableDependents();
238 }
239
240 public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser) {
241 discard = !callChangeListener( progress );
Alexandre Savard74eccf32012-09-11 19:12:29 -0400242 summary.setText(CURRENT_VALUE + progress);
Alexandre Savarde2bb2592012-09-11 18:39:57 -0400243 }
244
245 public void onStartTrackingTouch (SeekBar seekBar) {
246 discard = false;
247 }
248
249 public void onStopTrackingTouch (SeekBar seekBar) {
250 if (discard)
251 seekBar.setProgress( progress );
252 else {
253 setProgress( seekBar.getProgress() );
254
255 OnPreferenceChangeListener listener = getOnPreferenceChangeListener();
256 //if (listener instanceof AbstractSeekBarListener)
257 //// setSummary( ((AbstractSeekBarListener)listener).toSummary( seekBar.getProgress() ) );
258 }
Alexandre Savard5e0b9472012-09-11 17:56:30 -0400259 }
260 }
Alexandre Savarddcd37402012-09-06 18:36:48 -0400261}