/* * Copyright (C) 2012 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.android.settings.profiles; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.media.AudioManager; import android.preference.Preference; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.SeekBar; import com.android.settings.R; public class StreamVolumePreference extends Preference implements CompoundButton.OnCheckedChangeListener, View.OnClickListener { private boolean mProtectFromCheckedChange = false; private CheckBox mCheckBox; final static String TAG = "StreamVolumePreference"; private ProfileConfig.StreamItem mStreamItem; private SeekBar mBar; /** * @param context * @param attrs * @param defStyle */ public StreamVolumePreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } /** * @param context * @param attrs */ public StreamVolumePreference(Context context, AttributeSet attrs) { super(context, attrs); init(); } /** * @param context */ public StreamVolumePreference(Context context) { super(context); init(); } @Override public View getView(View convertView, ViewGroup parent) { View view = super.getView(convertView, parent); View widget = view.findViewById(R.id.profile_checkbox); if ((widget != null) && widget instanceof CheckBox) { mCheckBox = (CheckBox) widget; mCheckBox.setOnCheckedChangeListener(this); mProtectFromCheckedChange = true; mCheckBox.setChecked(isChecked()); mProtectFromCheckedChange = false; } View textLayout = view.findViewById(R.id.text_layout); if ((textLayout != null) && textLayout instanceof LinearLayout) { textLayout.setOnClickListener(this); } return view; } private void init() { setLayoutResource(R.layout.preference_streamvolume); } public boolean isChecked() { return mStreamItem != null && mStreamItem.mSettings.isOverride(); } public void setStreamItem(ProfileConfig.StreamItem streamItem) { mStreamItem = streamItem; if (mCheckBox != null) { mCheckBox.setChecked(mStreamItem.mSettings.isOverride()); } } public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (mProtectFromCheckedChange) { return; } mStreamItem.mSettings.setOverride(isChecked); callChangeListener(isChecked); } protected Dialog createVolumeDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); final AudioManager am = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); builder.setTitle(mStreamItem.mLabel); mBar = new SeekBar(getContext()); mBar.setPaddingRelative(32, 16, 32, 16); // TODO: confirm appropriate padding mBar.setMax(am.getStreamMaxVolume(mStreamItem.mStreamId)); mBar.setProgress(mStreamItem.mSettings.getValue()); builder.setView(mBar); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int value = mBar.getProgress(); mStreamItem.mSettings.setValue(value); setSummary(getContext().getString(R.string.volume_override_summary) + " " + value + "/" + mBar.getMax()); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); return builder.create(); } public ProfileConfig.StreamItem getStreamItem() { return mStreamItem; } @Override public void onClick(android.view.View v) { if ((v != null) && (R.id.text_layout == v.getId())) { createVolumeDialog().show(); } } }