package com.byagowi.persiancalendar.view.preferences; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v7.preference.PreferenceDialogFragmentCompat; import android.util.Log; import android.view.View; import android.widget.SeekBar; import com.byagowi.persiancalendar.R; import com.byagowi.persiancalendar.util.Utils; import java.io.IOException; public class AthanVolumeDialog extends PreferenceDialogFragmentCompat { private final String TAG = AthanVolumeDialog.class.getName(); int volume; AudioManager audioManager; MediaPlayer mediaPlayer; @Override protected View onCreateDialogView(Context context) { View view = super.onCreateDialogView(context); final AthanVolumePreference athanPref = (AthanVolumePreference) getPreference(); audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); mediaPlayer = new MediaPlayer(); try { mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mediaPlayer.setDataSource( getContext(), Utils.getInstance(getContext()).getAthanUri()); audioManager.setStreamVolume(AudioManager.STREAM_ALARM, athanPref.getVolume(), 0); } catch (IOException e) { Log.e(TAG, e.getMessage()); } SeekBar seekBar = (SeekBar) view.findViewById(R.id.sbVolumeSlider); volume = athanPref.getVolume(); seekBar.setProgress(volume); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { volume = progress; audioManager.setStreamVolume(AudioManager.STREAM_ALARM, progress, 0); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { try { if (!mediaPlayer.isPlaying()) { mediaPlayer.prepare(); mediaPlayer.start(); } } catch (IOException | IllegalStateException ignored) { } } }); return view; } @Override public void onDialogClosed(boolean positiveResult) { final AthanVolumePreference athanPref = (AthanVolumePreference) getPreference(); mediaPlayer.release(); if (positiveResult) { athanPref.setVolume(volume); } } }