/**
*
*/
package org.orange.familylink.fragment.dialog;
import org.orange.familylink.R;
import org.orange.familylink.data.Settings;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.PreferenceManager;
/**
* 角色设置{@link DialogFragment}
* @author Team Orange
*/
public class RoleDialogFragment extends DialogFragment {
private String[] values;
private OnRoleChangeListener mListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
values = getResources().getStringArray(R.array.pref_role_values);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
String currentValue = PreferenceManager.getDefaultSharedPreferences(getActivity())
.getString(Settings.PREF_KEY_ROLE, null);
final int currentPosition = getItemPosition(currentValue);
builder
.setTitle(R.string.pref_title_role)
.setSingleChoiceItems(R.array.pref_role_titles, currentPosition,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which != currentPosition) {
String value = values[which];
Settings.setRole(getActivity(), value);
if(mListener != null)
mListener.onRoleChange(RoleDialogFragment.this);
}
dismiss();
}
});
return builder.create();
}
/**
* 取得{@link Settings#PREF_KEY_ROLE}值在其选择列表中的位置
* @param value 待查{@link Settings#PREF_KEY_ROLE}值
* @return 如果查到了指定值,返回其位置;如果查不到,返回-1
*/
private int getItemPosition(String value) {
for(int i = 0 ; i < values.length ; i++)
if(values[i].equals(value))
return i;
return -1;
}
/**
* 设置{@link OnRoleChangeListener}
* @param mListener 新的{@link OnRoleChangeListener};可以设置为null,来取消之前的设置
*/
public void setOnRoleChangeListener(OnRoleChangeListener mListener) {
this.mListener = mListener;
}
/**
* 用来接收 改变用户角色事件 的回调接口
* @author Team Orange
*/
public static interface OnRoleChangeListener {
/**
* 当用户角色改变时调用此方法
* @param dialog 发生此事件的{@link DialogFragment}
*/
public void onRoleChange(RoleDialogFragment dialog);
}
}