/*
* 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.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 com.android.settings.R;
public class ProfileRingModePreference extends Preference implements
CompoundButton.OnCheckedChangeListener, View.OnClickListener {
private boolean mProtectFromCheckedChange = false;
private CheckBox mCheckBox;
final static String TAG = "ProfileRingModePreference";
private ProfileConfig.RingModeItem mRingModeItem;
final static int defaultChoice = -1;
private int currentChoice;
/**
* @param context
* @param attrs
* @param defStyle
*/
public ProfileRingModePreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
/**
* @param context
* @param attrs
*/
public ProfileRingModePreference(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
/**
* @param context
*/
public ProfileRingModePreference(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 mRingModeItem != null && mRingModeItem.mSettings.isOverride();
}
public void setRingModeItem(ProfileConfig.RingModeItem ringModeItem) {
mRingModeItem = ringModeItem;
if (mCheckBox != null) {
mCheckBox.setChecked(mRingModeItem.mSettings.isOverride());
}
}
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (mProtectFromCheckedChange) {
return;
}
mRingModeItem.mSettings.setOverride(isChecked);
callChangeListener(isChecked);
}
protected Dialog createRingModeDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
final String[] ringModeValues = getContext().getResources().getStringArray(R.array.ring_mode_values);
String currentValue = mRingModeItem.mSettings.getValue();
if (currentValue != null) {
for (int i = 0; i < ringModeValues.length; i++) {
if (currentValue.equals(ringModeValues[i])) {
currentChoice = i;
break;
}
}
}
builder.setTitle(R.string.ring_mode_title);
builder.setSingleChoiceItems(R.array.ring_mode_entries, currentChoice, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
currentChoice = item;
}
});
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (currentChoice != defaultChoice) {
String value = ringModeValues[currentChoice];
mRingModeItem.mSettings.setValue(value);
setSummary(getContext().getResources().getStringArray(R.array.ring_mode_entries)[currentChoice]);
}
}
});
builder.setNegativeButton(android.R.string.cancel, null);
return builder.create();
}
public ProfileConfig.RingModeItem getRingModeItem() {
return mRingModeItem;
}
@Override
public void onClick(android.view.View v) {
if ((v != null) && (R.id.text_layout == v.getId())) {
createRingModeDialog().show();
}
}
public void setSummary(Context context) {
String[] entries = context.getResources().getStringArray(R.array.ring_mode_entries);
String[] values = context.getResources().getStringArray(R.array.ring_mode_values);
int l = entries.length;
String value = mRingModeItem.mSettings.getValue();
for (int i = 0; i < l; i++) {
if (value.equals(values[i])) {
setSummary(entries[i]);
break;
}
}
}
}